| 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/CacheStorage.h" | 5 #include "modules/cachestorage/CacheStorage.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ScriptPromiseResolver.h" | 7 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
| 9 #include "core/dom/DOMException.h" | 9 #include "core/dom/DOMException.h" |
| 10 #include "core/dom/ExceptionCode.h" | 10 #include "core/dom/ExceptionCode.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 class CacheStorage::Callbacks final | 47 class CacheStorage::Callbacks final |
| 48 : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { | 48 : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { |
| 49 WTF_MAKE_NONCOPYABLE(Callbacks); | 49 WTF_MAKE_NONCOPYABLE(Callbacks); |
| 50 | 50 |
| 51 public: | 51 public: |
| 52 explicit Callbacks(ScriptPromiseResolver* resolver) : m_resolver(resolver) {} | 52 explicit Callbacks(ScriptPromiseResolver* resolver) : m_resolver(resolver) {} |
| 53 ~Callbacks() override {} | 53 ~Callbacks() override {} |
| 54 | 54 |
| 55 void onSuccess() override { | 55 void onSuccess() override { |
| 56 if (!m_resolver->getExecutionContext() || | 56 if (!m_resolver->getExecutionContext() || |
| 57 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 57 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 58 return; | 58 return; |
| 59 m_resolver->resolve(true); | 59 m_resolver->resolve(true); |
| 60 m_resolver.clear(); | 60 m_resolver.clear(); |
| 61 } | 61 } |
| 62 | 62 |
| 63 void onError(WebServiceWorkerCacheError reason) override { | 63 void onError(WebServiceWorkerCacheError reason) override { |
| 64 if (!m_resolver->getExecutionContext() || | 64 if (!m_resolver->getExecutionContext() || |
| 65 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 65 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 66 return; | 66 return; |
| 67 if (reason == WebServiceWorkerCacheErrorNotFound) | 67 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 68 m_resolver->resolve(false); | 68 m_resolver->resolve(false); |
| 69 else | 69 else |
| 70 m_resolver->reject(CacheStorageError::createException(reason)); | 70 m_resolver->reject(CacheStorageError::createException(reason)); |
| 71 m_resolver.clear(); | 71 m_resolver.clear(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 private: | 74 private: |
| 75 Persistent<ScriptPromiseResolver> m_resolver; | 75 Persistent<ScriptPromiseResolver> m_resolver; |
| 76 }; | 76 }; |
| 77 | 77 |
| 78 // FIXME: Consider using CallbackPromiseAdapter. | 78 // FIXME: Consider using CallbackPromiseAdapter. |
| 79 class CacheStorage::WithCacheCallbacks final | 79 class CacheStorage::WithCacheCallbacks final |
| 80 : public WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks { | 80 : public WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks { |
| 81 WTF_MAKE_NONCOPYABLE(WithCacheCallbacks); | 81 WTF_MAKE_NONCOPYABLE(WithCacheCallbacks); |
| 82 | 82 |
| 83 public: | 83 public: |
| 84 WithCacheCallbacks(const String& cacheName, | 84 WithCacheCallbacks(const String& cacheName, |
| 85 CacheStorage* cacheStorage, | 85 CacheStorage* cacheStorage, |
| 86 ScriptPromiseResolver* resolver) | 86 ScriptPromiseResolver* resolver) |
| 87 : m_cacheName(cacheName), | 87 : m_cacheName(cacheName), |
| 88 m_cacheStorage(cacheStorage), | 88 m_cacheStorage(cacheStorage), |
| 89 m_resolver(resolver) {} | 89 m_resolver(resolver) {} |
| 90 ~WithCacheCallbacks() override {} | 90 ~WithCacheCallbacks() override {} |
| 91 | 91 |
| 92 void onSuccess(std::unique_ptr<WebServiceWorkerCache> webCache) override { | 92 void onSuccess(std::unique_ptr<WebServiceWorkerCache> webCache) override { |
| 93 if (!m_resolver->getExecutionContext() || | 93 if (!m_resolver->getExecutionContext() || |
| 94 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 94 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 95 return; | 95 return; |
| 96 Cache* cache = Cache::create(m_cacheStorage->m_scopedFetcher, | 96 Cache* cache = Cache::create(m_cacheStorage->m_scopedFetcher, |
| 97 wrapUnique(webCache.release())); | 97 wrapUnique(webCache.release())); |
| 98 m_resolver->resolve(cache); | 98 m_resolver->resolve(cache); |
| 99 m_resolver.clear(); | 99 m_resolver.clear(); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void onError(WebServiceWorkerCacheError reason) override { | 102 void onError(WebServiceWorkerCacheError reason) override { |
| 103 if (!m_resolver->getExecutionContext() || | 103 if (!m_resolver->getExecutionContext() || |
| 104 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 104 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 105 return; | 105 return; |
| 106 if (reason == WebServiceWorkerCacheErrorNotFound) | 106 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 107 m_resolver->resolve(); | 107 m_resolver->resolve(); |
| 108 else | 108 else |
| 109 m_resolver->reject(CacheStorageError::createException(reason)); | 109 m_resolver->reject(CacheStorageError::createException(reason)); |
| 110 m_resolver.clear(); | 110 m_resolver.clear(); |
| 111 } | 111 } |
| 112 | 112 |
| 113 private: | 113 private: |
| 114 String m_cacheName; | 114 String m_cacheName; |
| 115 Persistent<CacheStorage> m_cacheStorage; | 115 Persistent<CacheStorage> m_cacheStorage; |
| 116 Persistent<ScriptPromiseResolver> m_resolver; | 116 Persistent<ScriptPromiseResolver> m_resolver; |
| 117 }; | 117 }; |
| 118 | 118 |
| 119 // FIXME: Consider using CallbackPromiseAdapter. | 119 // FIXME: Consider using CallbackPromiseAdapter. |
| 120 class CacheStorage::MatchCallbacks | 120 class CacheStorage::MatchCallbacks |
| 121 : public WebServiceWorkerCacheStorage::CacheStorageMatchCallbacks { | 121 : public WebServiceWorkerCacheStorage::CacheStorageMatchCallbacks { |
| 122 WTF_MAKE_NONCOPYABLE(MatchCallbacks); | 122 WTF_MAKE_NONCOPYABLE(MatchCallbacks); |
| 123 | 123 |
| 124 public: | 124 public: |
| 125 explicit MatchCallbacks(ScriptPromiseResolver* resolver) | 125 explicit MatchCallbacks(ScriptPromiseResolver* resolver) |
| 126 : m_resolver(resolver) {} | 126 : m_resolver(resolver) {} |
| 127 | 127 |
| 128 void onSuccess(const WebServiceWorkerResponse& webResponse) override { | 128 void onSuccess(const WebServiceWorkerResponse& webResponse) override { |
| 129 if (!m_resolver->getExecutionContext() || | 129 if (!m_resolver->getExecutionContext() || |
| 130 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 130 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 131 return; | 131 return; |
| 132 ScriptState::Scope scope(m_resolver->getScriptState()); | 132 ScriptState::Scope scope(m_resolver->getScriptState()); |
| 133 m_resolver->resolve( | 133 m_resolver->resolve( |
| 134 Response::create(m_resolver->getScriptState(), webResponse)); | 134 Response::create(m_resolver->getScriptState(), webResponse)); |
| 135 m_resolver.clear(); | 135 m_resolver.clear(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 void onError(WebServiceWorkerCacheError reason) override { | 138 void onError(WebServiceWorkerCacheError reason) override { |
| 139 if (!m_resolver->getExecutionContext() || | 139 if (!m_resolver->getExecutionContext() || |
| 140 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 140 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 141 return; | 141 return; |
| 142 if (reason == WebServiceWorkerCacheErrorNotFound || | 142 if (reason == WebServiceWorkerCacheErrorNotFound || |
| 143 reason == WebServiceWorkerCacheErrorCacheNameNotFound) | 143 reason == WebServiceWorkerCacheErrorCacheNameNotFound) |
| 144 m_resolver->resolve(); | 144 m_resolver->resolve(); |
| 145 else | 145 else |
| 146 m_resolver->reject(CacheStorageError::createException(reason)); | 146 m_resolver->reject(CacheStorageError::createException(reason)); |
| 147 m_resolver.clear(); | 147 m_resolver.clear(); |
| 148 } | 148 } |
| 149 | 149 |
| 150 private: | 150 private: |
| 151 Persistent<ScriptPromiseResolver> m_resolver; | 151 Persistent<ScriptPromiseResolver> m_resolver; |
| 152 }; | 152 }; |
| 153 | 153 |
| 154 // FIXME: Consider using CallbackPromiseAdapter. | 154 // FIXME: Consider using CallbackPromiseAdapter. |
| 155 class CacheStorage::DeleteCallbacks final | 155 class CacheStorage::DeleteCallbacks final |
| 156 : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { | 156 : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { |
| 157 WTF_MAKE_NONCOPYABLE(DeleteCallbacks); | 157 WTF_MAKE_NONCOPYABLE(DeleteCallbacks); |
| 158 | 158 |
| 159 public: | 159 public: |
| 160 DeleteCallbacks(const String& cacheName, | 160 DeleteCallbacks(const String& cacheName, |
| 161 CacheStorage* cacheStorage, | 161 CacheStorage* cacheStorage, |
| 162 ScriptPromiseResolver* resolver) | 162 ScriptPromiseResolver* resolver) |
| 163 : m_cacheName(cacheName), | 163 : m_cacheName(cacheName), |
| 164 m_cacheStorage(cacheStorage), | 164 m_cacheStorage(cacheStorage), |
| 165 m_resolver(resolver) {} | 165 m_resolver(resolver) {} |
| 166 ~DeleteCallbacks() override {} | 166 ~DeleteCallbacks() override {} |
| 167 | 167 |
| 168 void onSuccess() override { | 168 void onSuccess() override { |
| 169 if (!m_resolver->getExecutionContext() || | 169 if (!m_resolver->getExecutionContext() || |
| 170 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 170 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 171 return; | 171 return; |
| 172 m_resolver->resolve(true); | 172 m_resolver->resolve(true); |
| 173 m_resolver.clear(); | 173 m_resolver.clear(); |
| 174 } | 174 } |
| 175 | 175 |
| 176 void onError(WebServiceWorkerCacheError reason) override { | 176 void onError(WebServiceWorkerCacheError reason) override { |
| 177 if (!m_resolver->getExecutionContext() || | 177 if (!m_resolver->getExecutionContext() || |
| 178 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 178 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 179 return; | 179 return; |
| 180 if (reason == WebServiceWorkerCacheErrorNotFound) | 180 if (reason == WebServiceWorkerCacheErrorNotFound) |
| 181 m_resolver->resolve(false); | 181 m_resolver->resolve(false); |
| 182 else | 182 else |
| 183 m_resolver->reject(CacheStorageError::createException(reason)); | 183 m_resolver->reject(CacheStorageError::createException(reason)); |
| 184 m_resolver.clear(); | 184 m_resolver.clear(); |
| 185 } | 185 } |
| 186 | 186 |
| 187 private: | 187 private: |
| 188 String m_cacheName; | 188 String m_cacheName; |
| 189 Persistent<CacheStorage> m_cacheStorage; | 189 Persistent<CacheStorage> m_cacheStorage; |
| 190 Persistent<ScriptPromiseResolver> m_resolver; | 190 Persistent<ScriptPromiseResolver> m_resolver; |
| 191 }; | 191 }; |
| 192 | 192 |
| 193 // FIXME: Consider using CallbackPromiseAdapter. | 193 // FIXME: Consider using CallbackPromiseAdapter. |
| 194 class CacheStorage::KeysCallbacks final | 194 class CacheStorage::KeysCallbacks final |
| 195 : public WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks { | 195 : public WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks { |
| 196 WTF_MAKE_NONCOPYABLE(KeysCallbacks); | 196 WTF_MAKE_NONCOPYABLE(KeysCallbacks); |
| 197 | 197 |
| 198 public: | 198 public: |
| 199 explicit KeysCallbacks(ScriptPromiseResolver* resolver) | 199 explicit KeysCallbacks(ScriptPromiseResolver* resolver) |
| 200 : m_resolver(resolver) {} | 200 : m_resolver(resolver) {} |
| 201 ~KeysCallbacks() override {} | 201 ~KeysCallbacks() override {} |
| 202 | 202 |
| 203 void onSuccess(const WebVector<WebString>& keys) override { | 203 void onSuccess(const WebVector<WebString>& keys) override { |
| 204 if (!m_resolver->getExecutionContext() || | 204 if (!m_resolver->getExecutionContext() || |
| 205 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 205 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 206 return; | 206 return; |
| 207 Vector<String> wtfKeys; | 207 Vector<String> wtfKeys; |
| 208 for (size_t i = 0; i < keys.size(); ++i) | 208 for (size_t i = 0; i < keys.size(); ++i) |
| 209 wtfKeys.append(keys[i]); | 209 wtfKeys.append(keys[i]); |
| 210 m_resolver->resolve(wtfKeys); | 210 m_resolver->resolve(wtfKeys); |
| 211 m_resolver.clear(); | 211 m_resolver.clear(); |
| 212 } | 212 } |
| 213 | 213 |
| 214 void onError(WebServiceWorkerCacheError reason) override { | 214 void onError(WebServiceWorkerCacheError reason) override { |
| 215 if (!m_resolver->getExecutionContext() || | 215 if (!m_resolver->getExecutionContext() || |
| 216 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 216 m_resolver->getExecutionContext()->isContextDestroyed()) |
| 217 return; | 217 return; |
| 218 m_resolver->reject(CacheStorageError::createException(reason)); | 218 m_resolver->reject(CacheStorageError::createException(reason)); |
| 219 m_resolver.clear(); | 219 m_resolver.clear(); |
| 220 } | 220 } |
| 221 | 221 |
| 222 private: | 222 private: |
| 223 Persistent<ScriptPromiseResolver> m_resolver; | 223 Persistent<ScriptPromiseResolver> m_resolver; |
| 224 }; | 224 }; |
| 225 | 225 |
| 226 CacheStorage* CacheStorage::create( | 226 CacheStorage* CacheStorage::create( |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 | 353 |
| 354 void CacheStorage::dispose() { | 354 void CacheStorage::dispose() { |
| 355 m_webCacheStorage.reset(); | 355 m_webCacheStorage.reset(); |
| 356 } | 356 } |
| 357 | 357 |
| 358 DEFINE_TRACE(CacheStorage) { | 358 DEFINE_TRACE(CacheStorage) { |
| 359 visitor->trace(m_scopedFetcher); | 359 visitor->trace(m_scopedFetcher); |
| 360 } | 360 } |
| 361 | 361 |
| 362 } // namespace blink | 362 } // namespace blink |
| OLD | NEW |