Index: Source/modules/serviceworkers/CacheStorage.cpp |
diff --git a/Source/modules/serviceworkers/CacheStorage.cpp b/Source/modules/serviceworkers/CacheStorage.cpp |
index a012042cd3b2f1753860a9775c145cdb2939b8f9..a075bce56d6d88a98ad46cbe951f90ac4bb36963 100644 |
--- a/Source/modules/serviceworkers/CacheStorage.cpp |
+++ b/Source/modules/serviceworkers/CacheStorage.cpp |
@@ -7,51 +7,147 @@ |
#include "bindings/core/v8/ScriptPromiseResolver.h" |
#include "bindings/core/v8/ScriptState.h" |
+#include "public/platform/WebServiceWorkerCacheError.h" |
+#include "public/platform/WebServiceWorkerCacheStorage.h" |
namespace blink { |
-PassRefPtrWillBeRawPtr<CacheStorage> CacheStorage::create() |
+namespace { |
+ |
+const char* CacheErrorToString(WebServiceWorkerCacheError reason) |
+{ |
+ // FIXME: Construct correct DOM error objects rather than returning strings. |
+ switch (reason) { |
+ case WebServiceWorkerCacheError::WebServiceWorkerCacheErrorNotImplemented: |
+ return "not implemented"; |
+ case WebServiceWorkerCacheError::WebServiceWorkerCacheErrorNotFound: |
+ return "not found"; |
+ case WebServiceWorkerCacheError::WebServiceWorkerCacheErrorExists: |
+ return "entry already exists"; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return "unknown error"; |
+ } |
+} |
+ |
+class CacheStorageCallbacks : public WebServiceWorkerCacheStorage::CacheStorageCallbacks { |
+public: |
jochen (gone - plz use gerrit)
2014/08/05 08:51:56
wtf_make_noncopyable
gavinp
2014/08/05 09:09:23
Done.
|
+ CacheStorageCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_resolver(resolver) { } |
jochen (gone - plz use gerrit)
2014/08/05 08:51:56
explicit
gavinp
2014/08/05 09:09:23
Done.
|
+ virtual ~CacheStorageCallbacks() { } |
+ |
+ virtual void onSuccess() OVERRIDE |
+ { |
+ m_resolver->resolve(true); |
+ } |
+ |
+ virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE |
+ { |
+ m_resolver->reject(CacheErrorToString(*reason)); |
+ } |
+ |
+private: |
+ const RefPtr<ScriptPromiseResolver> m_resolver; |
+}; |
+ |
+class CacheStorageWithCacheCallbacks : public WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks { |
+public: |
+ CacheStorageWithCacheCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_resolver(resolver) { } |
jochen (gone - plz use gerrit)
2014/08/05 08:51:56
same here
gavinp
2014/08/05 09:09:23
Done.
|
+ virtual ~CacheStorageWithCacheCallbacks() { } |
+ |
+ virtual void onSuccess(WebServiceWorkerCache* cache) OVERRIDE |
+ { |
+ // FIXME: There should be a blink side of the Cache object implementation here, rather than |
+ // this nonsensical return. |
+ m_resolver->resolve("succesfully returned a cache"); |
+ } |
+ |
+ virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE |
+ { |
+ m_resolver->reject(CacheErrorToString(*reason)); |
+ } |
+ |
+private: |
+ const RefPtr<ScriptPromiseResolver> m_resolver; |
+}; |
+ |
+class CacheStorageKeysCallbacks : public WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks { |
+public: |
+ CacheStorageKeysCallbacks(ScriptState* scriptState, PassRefPtr<ScriptPromiseResolver> resolver) : m_resolver(resolver), m_scriptState(scriptState) { } |
gavinp
2014/08/05 09:09:23
Here too after I removed the unused param.
|
+ virtual ~CacheStorageKeysCallbacks() { } |
+ |
+ virtual void onSuccess(blink::WebVector<blink::WebString>* keys) OVERRIDE |
+ { |
+ Vector<String> wtfKeys; |
+ for (size_t i = 0; i < keys->size(); ++i) |
+ wtfKeys.append((*keys)[i]); |
+ m_resolver->resolve(wtfKeys); |
+ } |
+ |
+ virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE |
+ { |
+ m_resolver->reject(CacheErrorToString(*reason)); |
+ } |
+ |
+private: |
+ const RefPtr<ScriptPromiseResolver> m_resolver; |
+ const RefPtr<ScriptState> m_scriptState; |
+}; |
+ |
+} |
+ |
+PassRefPtr<CacheStorage> CacheStorage::create(WebServiceWorkerCacheStorage* webCacheStorage) |
{ |
- return adoptRefWillBeNoop(new CacheStorage()); |
+ return adoptRefWillBeNoop(new CacheStorage(webCacheStorage)); |
} |
-// FIXME: Implement every one of these methods. |
-ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const String& key) |
+ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& cacheName) |
{ |
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
- resolver->reject("not implemented"); |
+ if (m_webCacheStorage) |
+ m_webCacheStorage->dispatchGet(new CacheStorageWithCacheCallbacks(resolver), cacheName); |
+ else |
+ resolver->reject("no implementation provided"); |
return promise; |
} |
-ScriptPromise CacheStorage::rename(ScriptState* scriptState, const String& oldKey, const String& newKey) |
+ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheName) |
{ |
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
- resolver->reject("not implemented"); |
+ if (m_webCacheStorage) |
+ m_webCacheStorage->dispatchHas(new CacheStorageCallbacks(resolver), cacheName); |
+ else |
+ resolver->reject("no implementation provided"); |
return promise; |
} |
-ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& key) |
+ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const String& cacheName) |
{ |
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
- resolver->reject("not implemented"); |
+ if (m_webCacheStorage) |
+ m_webCacheStorage->dispatchCreate(new CacheStorageWithCacheCallbacks(resolver), cacheName); |
+ else |
+ resolver->reject("no implementation provided"); |
return promise; |
} |
-ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const String& key) |
+ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const String& cacheName) |
{ |
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
- resolver->reject("not implemented"); |
+ if (m_webCacheStorage) |
+ m_webCacheStorage->dispatchDelete(new CacheStorageCallbacks(resolver), cacheName); |
+ else |
+ resolver->reject("no implementation provided"); |
return promise; |
} |
@@ -61,12 +157,15 @@ ScriptPromise CacheStorage::keys(ScriptState* scriptState) |
RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
- resolver->reject("not implemented"); |
+ if (m_webCacheStorage) |
+ m_webCacheStorage->dispatchKeys(new CacheStorageKeysCallbacks(scriptState, resolver)); |
+ else |
+ resolver->reject("no implementation provided"); |
return promise; |
} |
-CacheStorage::CacheStorage() |
+CacheStorage::CacheStorage(WebServiceWorkerCacheStorage* webCacheStorage) : m_webCacheStorage(webCacheStorage) |
{ |
ScriptWrappable::init(this); |
} |