1c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// found in the LICENSE file. 4c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 5c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "config.h" 6c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "modules/serviceworkers/CacheStorage.h" 7c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "bindings/core/v8/ScriptPromiseResolver.h" 9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "bindings/core/v8/ScriptState.h" 109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/dom/DOMException.h" 11e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "modules/serviceworkers/Cache.h" 12c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "public/platform/WebServiceWorkerCacheError.h" 13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "public/platform/WebServiceWorkerCacheStorage.h" 14c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 15c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 16c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 17c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace { 18c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 199e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)PassRefPtrWillBeRawPtr<DOMException> createNoImplementationException() 20c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return DOMException::create(NotSupportedError, "No CacheStorage implementation provided."); 22c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 269e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)// FIXME: Consider using CallbackPromiseAdapter. 277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass CacheStorage::Callbacks FINAL : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { 287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WTF_MAKE_NONCOPYABLE(Callbacks); 29c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)public: 307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci explicit Callbacks(PassRefPtr<ScriptPromiseResolver> resolver) 317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_resolver(resolver) { } 327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ~Callbacks() { } 33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void onSuccess() OVERRIDE 35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) m_resolver->resolve(true); 379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver.clear(); 38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 429e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (*reason == WebServiceWorkerCacheErrorNotFound) 439e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver->resolve(false); 449e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else 457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 469e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver.clear(); 47c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)private: 509e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) RefPtr<ScriptPromiseResolver> m_resolver; 51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}; 52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)// FIXME: Consider using CallbackPromiseAdapter. 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass CacheStorage::WithCacheCallbacks FINAL : public WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks { 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WTF_MAKE_NONCOPYABLE(WithCacheCallbacks); 56c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)public: 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WithCacheCallbacks(const String& cacheName, CacheStorage* cacheStorage, PassRefPtr<ScriptPromiseResolver> resolver) 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_cacheName(cacheName), m_cacheStorage(cacheStorage), m_resolver(resolver) { } 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ~WithCacheCallbacks() { } 60c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void onSuccess(WebServiceWorkerCache* webCache) OVERRIDE 62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: Remove this once content's WebServiceWorkerCache implementation has landed. 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!webCache) { 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->reject("not implemented"); 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Cache* cache = Cache::create(webCache); 697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_cacheStorage->m_nameToCacheMap.set(m_cacheName, cache); 707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->resolve(cache); 717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver.clear(); 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (*reason == WebServiceWorkerCacheErrorNotFound) 777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->resolve(); 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci else 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver.clear(); 817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprivate: 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String m_cacheName; 857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Persistent<CacheStorage> m_cacheStorage; 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtr<ScriptPromiseResolver> m_resolver; 877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}; 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// FIXME: Consider using CallbackPromiseAdapter. 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass CacheStorage::DeleteCallbacks FINAL : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { 917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WTF_MAKE_NONCOPYABLE(DeleteCallbacks); 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccipublic: 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DeleteCallbacks(const String& cacheName, CacheStorage* cacheStorage, PassRefPtr<ScriptPromiseResolver> resolver) 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_cacheName(cacheName), m_cacheStorage(cacheStorage), m_resolver(resolver) { } 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ~DeleteCallbacks() { } 967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void onSuccess() OVERRIDE 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_cacheStorage->m_nameToCacheMap.remove(m_cacheName); 1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->resolve(true); 1019e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver.clear(); 102c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 103c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 104c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE 105c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 1069e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (*reason == WebServiceWorkerCacheErrorNotFound) 1079e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver->resolve(false); 1089e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 1109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver.clear(); 111c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 112c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 113c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)private: 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String m_cacheName; 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Persistent<CacheStorage> m_cacheStorage; 1169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) RefPtr<ScriptPromiseResolver> m_resolver; 117c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}; 118c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1199e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)// FIXME: Consider using CallbackPromiseAdapter. 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass CacheStorage::KeysCallbacks FINAL : public WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks { 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WTF_MAKE_NONCOPYABLE(KeysCallbacks); 122c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)public: 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci explicit KeysCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_resolver(resolver) { } 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual ~KeysCallbacks() { } 126c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 127e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void onSuccess(WebVector<WebString>* keys) OVERRIDE 128c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 129c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Vector<String> wtfKeys; 130c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (size_t i = 0; i < keys->size(); ++i) 131c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) wtfKeys.append((*keys)[i]); 132c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) m_resolver->resolve(wtfKeys); 1339e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver.clear(); 134c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 135c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 136c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE 137c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 1389e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver->reject(Cache::domExceptionForCacheError(*reason)); 1399e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_resolver.clear(); 140c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 141c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 142c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)private: 1439e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) RefPtr<ScriptPromiseResolver> m_resolver; 144c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)}; 145c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciCacheStorage* CacheStorage::create(WebServiceWorkerCacheStorage* webCacheStorage) 147c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return new CacheStorage(webCacheStorage); 149c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 150c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 151c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& cacheName) 152c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 153c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); 154c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const ScriptPromise promise = resolver->promise(); 155c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_nameToCacheMap.contains(cacheName)) { 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Cache* cache = m_nameToCacheMap.find(cacheName)->value; 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci resolver->resolve(cache); 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return promise; 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 162c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (m_webCacheStorage) 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webCacheStorage->dispatchGet(new WithCacheCallbacks(cacheName, this, resolver), cacheName); 164c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 1659e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) resolver->reject(createNoImplementationException()); 166c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 167c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return promise; 168c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 169c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 170c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheName) 171c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 172c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); 173c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const ScriptPromise promise = resolver->promise(); 174c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_nameToCacheMap.contains(cacheName)) { 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci resolver->resolve(true); 1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return promise; 1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 180c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (m_webCacheStorage) 1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webCacheStorage->dispatchHas(new Callbacks(resolver), cacheName); 182c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 1839e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) resolver->reject(createNoImplementationException()); 184c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 185c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return promise; 186c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 187c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 188c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const String& cacheName) 189c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 190c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); 191c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const ScriptPromise promise = resolver->promise(); 192c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 193c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (m_webCacheStorage) 1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webCacheStorage->dispatchCreate(new WithCacheCallbacks(cacheName, this, resolver), cacheName); 195c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 1969e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) resolver->reject(createNoImplementationException()); 197c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 198c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return promise; 199c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 200c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 201c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const String& cacheName) 202c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 203c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); 204c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const ScriptPromise promise = resolver->promise(); 205c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 206c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (m_webCacheStorage) 2077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webCacheStorage->dispatchDelete(new DeleteCallbacks(cacheName, this, resolver), cacheName); 208c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 2099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) resolver->reject(createNoImplementationException()); 210c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 211c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return promise; 212c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 213c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 214c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)ScriptPromise CacheStorage::keys(ScriptState* scriptState) 215c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 216c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); 217c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const ScriptPromise promise = resolver->promise(); 218c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 219c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (m_webCacheStorage) 2207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webCacheStorage->dispatchKeys(new KeysCallbacks(resolver)); 221c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 2229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) resolver->reject(createNoImplementationException()); 223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 224c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return promise; 225c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 226c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 2277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid CacheStorage::trace(Visitor* visitor) 2287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 2297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci visitor->trace(m_nameToCacheMap); 2307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 2317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciCacheStorage::CacheStorage(WebServiceWorkerCacheStorage* webCacheStorage) 2337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci : m_webCacheStorage(webCacheStorage) 234c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 235c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 236c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 237c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 238