| 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 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 // FIXME: Consider using CallbackPromiseAdapter. | 31 // FIXME: Consider using CallbackPromiseAdapter. |
| 32 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { | 32 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { |
| 33 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); | 33 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); |
| 34 | 34 |
| 35 public: | 35 public: |
| 36 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver) | 36 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver) |
| 37 : m_resolver(resolver) {} | 37 : m_resolver(resolver) {} |
| 38 | 38 |
| 39 void onSuccess(const WebServiceWorkerResponse& webResponse) override { | 39 void onSuccess(const WebServiceWorkerResponse& webResponse) override { |
| 40 if (!m_resolver->getExecutionContext() || | 40 if (!m_resolver->getExecutionContext()) |
| 41 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 42 return; | 41 return; |
| 43 ScriptState::Scope scope(m_resolver->getScriptState()); | 42 ScriptState::Scope scope(m_resolver->getScriptState()); |
| 44 m_resolver->resolve( | 43 m_resolver->resolve( |
| 45 Response::create(m_resolver->getScriptState(), webResponse)); | 44 Response::create(m_resolver->getScriptState(), webResponse)); |
| 46 m_resolver.clear(); | 45 m_resolver.clear(); |
| 47 } | 46 } |
| 48 | 47 |
| 49 void onError(WebServiceWorkerCacheError reason) override { | 48 void onError(WebServiceWorkerCacheError reason) override { |
| 50 if (!m_resolver->getExecutionContext() || | 49 if (!m_resolver->getExecutionContext()) |
| 51 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 52 return; | 50 return; |
| 53 if (reason == WebServiceWorkerCacheErrorNotFound) | 51 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 54 m_resolver->resolve(); | 52 m_resolver->resolve(); |
| 55 else | 53 else |
| 56 m_resolver->reject(CacheStorageError::createException(reason)); | 54 m_resolver->reject(CacheStorageError::createException(reason)); |
| 57 m_resolver.clear(); | 55 m_resolver.clear(); |
| 58 } | 56 } |
| 59 | 57 |
| 60 private: | 58 private: |
| 61 Persistent<ScriptPromiseResolver> m_resolver; | 59 Persistent<ScriptPromiseResolver> m_resolver; |
| 62 }; | 60 }; |
| 63 | 61 |
| 64 // FIXME: Consider using CallbackPromiseAdapter. | 62 // FIXME: Consider using CallbackPromiseAdapter. |
| 65 class CacheWithResponsesCallbacks | 63 class CacheWithResponsesCallbacks |
| 66 : public WebServiceWorkerCache::CacheWithResponsesCallbacks { | 64 : public WebServiceWorkerCache::CacheWithResponsesCallbacks { |
| 67 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); | 65 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); |
| 68 | 66 |
| 69 public: | 67 public: |
| 70 explicit CacheWithResponsesCallbacks(ScriptPromiseResolver* resolver) | 68 explicit CacheWithResponsesCallbacks(ScriptPromiseResolver* resolver) |
| 71 : m_resolver(resolver) {} | 69 : m_resolver(resolver) {} |
| 72 | 70 |
| 73 void onSuccess( | 71 void onSuccess( |
| 74 const WebVector<WebServiceWorkerResponse>& webResponses) override { | 72 const WebVector<WebServiceWorkerResponse>& webResponses) override { |
| 75 if (!m_resolver->getExecutionContext() || | 73 if (!m_resolver->getExecutionContext()) |
| 76 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 77 return; | 74 return; |
| 78 ScriptState::Scope scope(m_resolver->getScriptState()); | 75 ScriptState::Scope scope(m_resolver->getScriptState()); |
| 79 HeapVector<Member<Response>> responses; | 76 HeapVector<Member<Response>> responses; |
| 80 for (size_t i = 0; i < webResponses.size(); ++i) | 77 for (size_t i = 0; i < webResponses.size(); ++i) |
| 81 responses.append( | 78 responses.append( |
| 82 Response::create(m_resolver->getScriptState(), webResponses[i])); | 79 Response::create(m_resolver->getScriptState(), webResponses[i])); |
| 83 m_resolver->resolve(responses); | 80 m_resolver->resolve(responses); |
| 84 m_resolver.clear(); | 81 m_resolver.clear(); |
| 85 } | 82 } |
| 86 | 83 |
| 87 void onError(WebServiceWorkerCacheError reason) override { | 84 void onError(WebServiceWorkerCacheError reason) override { |
| 88 if (!m_resolver->getExecutionContext() || | 85 if (!m_resolver->getExecutionContext()) |
| 89 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 90 return; | 86 return; |
| 91 m_resolver->reject(CacheStorageError::createException(reason)); | 87 m_resolver->reject(CacheStorageError::createException(reason)); |
| 92 m_resolver.clear(); | 88 m_resolver.clear(); |
| 93 } | 89 } |
| 94 | 90 |
| 95 protected: | 91 protected: |
| 96 Persistent<ScriptPromiseResolver> m_resolver; | 92 Persistent<ScriptPromiseResolver> m_resolver; |
| 97 }; | 93 }; |
| 98 | 94 |
| 99 // FIXME: Consider using CallbackPromiseAdapter. | 95 // FIXME: Consider using CallbackPromiseAdapter. |
| 100 class CacheDeleteCallback : public WebServiceWorkerCache::CacheBatchCallbacks { | 96 class CacheDeleteCallback : public WebServiceWorkerCache::CacheBatchCallbacks { |
| 101 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); | 97 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); |
| 102 | 98 |
| 103 public: | 99 public: |
| 104 explicit CacheDeleteCallback(ScriptPromiseResolver* resolver) | 100 explicit CacheDeleteCallback(ScriptPromiseResolver* resolver) |
| 105 : m_resolver(resolver) {} | 101 : m_resolver(resolver) {} |
| 106 | 102 |
| 107 void onSuccess() override { | 103 void onSuccess() override { |
| 108 if (!m_resolver->getExecutionContext() || | 104 if (!m_resolver->getExecutionContext()) |
| 109 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 110 return; | 105 return; |
| 111 m_resolver->resolve(true); | 106 m_resolver->resolve(true); |
| 112 m_resolver.clear(); | 107 m_resolver.clear(); |
| 113 } | 108 } |
| 114 | 109 |
| 115 void onError(WebServiceWorkerCacheError reason) override { | 110 void onError(WebServiceWorkerCacheError reason) override { |
| 116 if (!m_resolver->getExecutionContext() || | 111 if (!m_resolver->getExecutionContext()) |
| 117 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 118 return; | 112 return; |
| 119 if (reason == WebServiceWorkerCacheErrorNotFound) | 113 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 120 m_resolver->resolve(false); | 114 m_resolver->resolve(false); |
| 121 else | 115 else |
| 122 m_resolver->reject(CacheStorageError::createException(reason)); | 116 m_resolver->reject(CacheStorageError::createException(reason)); |
| 123 m_resolver.clear(); | 117 m_resolver.clear(); |
| 124 } | 118 } |
| 125 | 119 |
| 126 private: | 120 private: |
| 127 Persistent<ScriptPromiseResolver> m_resolver; | 121 Persistent<ScriptPromiseResolver> m_resolver; |
| 128 }; | 122 }; |
| 129 | 123 |
| 130 // FIXME: Consider using CallbackPromiseAdapter. | 124 // FIXME: Consider using CallbackPromiseAdapter. |
| 131 class CacheWithRequestsCallbacks | 125 class CacheWithRequestsCallbacks |
| 132 : public WebServiceWorkerCache::CacheWithRequestsCallbacks { | 126 : public WebServiceWorkerCache::CacheWithRequestsCallbacks { |
| 133 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); | 127 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); |
| 134 | 128 |
| 135 public: | 129 public: |
| 136 explicit CacheWithRequestsCallbacks(ScriptPromiseResolver* resolver) | 130 explicit CacheWithRequestsCallbacks(ScriptPromiseResolver* resolver) |
| 137 : m_resolver(resolver) {} | 131 : m_resolver(resolver) {} |
| 138 | 132 |
| 139 void onSuccess( | 133 void onSuccess( |
| 140 const WebVector<WebServiceWorkerRequest>& webRequests) override { | 134 const WebVector<WebServiceWorkerRequest>& webRequests) override { |
| 141 if (!m_resolver->getExecutionContext() || | 135 if (!m_resolver->getExecutionContext()) |
| 142 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 143 return; | 136 return; |
| 144 ScriptState::Scope scope(m_resolver->getScriptState()); | 137 ScriptState::Scope scope(m_resolver->getScriptState()); |
| 145 HeapVector<Member<Request>> requests; | 138 HeapVector<Member<Request>> requests; |
| 146 for (size_t i = 0; i < webRequests.size(); ++i) | 139 for (size_t i = 0; i < webRequests.size(); ++i) |
| 147 requests.append( | 140 requests.append( |
| 148 Request::create(m_resolver->getScriptState(), webRequests[i])); | 141 Request::create(m_resolver->getScriptState(), webRequests[i])); |
| 149 m_resolver->resolve(requests); | 142 m_resolver->resolve(requests); |
| 150 m_resolver.clear(); | 143 m_resolver.clear(); |
| 151 } | 144 } |
| 152 | 145 |
| 153 void onError(WebServiceWorkerCacheError reason) override { | 146 void onError(WebServiceWorkerCacheError reason) override { |
| 154 if (!m_resolver->getExecutionContext() || | 147 if (!m_resolver->getExecutionContext()) |
| 155 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 156 return; | 148 return; |
| 157 m_resolver->reject(CacheStorageError::createException(reason)); | 149 m_resolver->reject(CacheStorageError::createException(reason)); |
| 158 m_resolver.clear(); | 150 m_resolver.clear(); |
| 159 } | 151 } |
| 160 | 152 |
| 161 private: | 153 private: |
| 162 Persistent<ScriptPromiseResolver> m_resolver; | 154 Persistent<ScriptPromiseResolver> m_resolver; |
| 163 }; | 155 }; |
| 164 | 156 |
| 165 // Used for UMA. Append only. | 157 // Used for UMA. Append only. |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 m_resolver(resolver) { | 283 m_resolver(resolver) { |
| 292 ASSERT(0 < m_numberOfRemainingOperations); | 284 ASSERT(0 < m_numberOfRemainingOperations); |
| 293 m_batchOperations.resize(numberOfOperations); | 285 m_batchOperations.resize(numberOfOperations); |
| 294 } | 286 } |
| 295 | 287 |
| 296 void onSuccess(size_t index, | 288 void onSuccess(size_t index, |
| 297 const WebServiceWorkerCache::BatchOperation& batchOperation) { | 289 const WebServiceWorkerCache::BatchOperation& batchOperation) { |
| 298 ASSERT(index < m_batchOperations.size()); | 290 ASSERT(index < m_batchOperations.size()); |
| 299 if (m_completed) | 291 if (m_completed) |
| 300 return; | 292 return; |
| 301 if (!m_resolver->getExecutionContext() || | 293 if (!m_resolver->getExecutionContext()) |
| 302 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 303 return; | 294 return; |
| 304 m_batchOperations[index] = batchOperation; | 295 m_batchOperations[index] = batchOperation; |
| 305 if (--m_numberOfRemainingOperations != 0) | 296 if (--m_numberOfRemainingOperations != 0) |
| 306 return; | 297 return; |
| 307 m_cache->webCache()->dispatchBatch( | 298 m_cache->webCache()->dispatchBatch( |
| 308 new CallbackPromiseAdapter<void, CacheStorageError>(m_resolver), | 299 new CallbackPromiseAdapter<void, CacheStorageError>(m_resolver), |
| 309 m_batchOperations); | 300 m_batchOperations); |
| 310 } | 301 } |
| 311 | 302 |
| 312 void onError(const String& errorMessage) { | 303 void onError(const String& errorMessage) { |
| 313 if (m_completed) | 304 if (m_completed) |
| 314 return; | 305 return; |
| 315 m_completed = true; | 306 m_completed = true; |
| 316 if (!m_resolver->getExecutionContext() || | 307 if (!m_resolver->getExecutionContext()) |
| 317 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | |
| 318 return; | 308 return; |
| 319 ScriptState* state = m_resolver->getScriptState(); | 309 ScriptState* state = m_resolver->getScriptState(); |
| 320 ScriptState::Scope scope(state); | 310 ScriptState::Scope scope(state); |
| 321 m_resolver->reject( | 311 m_resolver->reject( |
| 322 V8ThrowException::createTypeError(state->isolate(), errorMessage)); | 312 V8ThrowException::createTypeError(state->isolate(), errorMessage)); |
| 323 } | 313 } |
| 324 | 314 |
| 325 DEFINE_INLINE_VIRTUAL_TRACE() { | 315 DEFINE_INLINE_VIRTUAL_TRACE() { |
| 326 visitor->trace(m_cache); | 316 visitor->trace(m_cache); |
| 327 visitor->trace(m_resolver); | 317 visitor->trace(m_resolver); |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), webRequest, | 684 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), webRequest, |
| 695 toWebQueryParams(options)); | 685 toWebQueryParams(options)); |
| 696 return promise; | 686 return promise; |
| 697 } | 687 } |
| 698 | 688 |
| 699 WebServiceWorkerCache* Cache::webCache() const { | 689 WebServiceWorkerCache* Cache::webCache() const { |
| 700 return m_webCache.get(); | 690 return m_webCache.get(); |
| 701 } | 691 } |
| 702 | 692 |
| 703 } // namespace blink | 693 } // namespace blink |
| OLD | NEW |