| 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 "config.h" | 5 #include "config.h" |
| 6 #include "modules/serviceworkers/CacheStorage.h" | 6 #include "modules/serviceworkers/CacheStorage.h" |
| 7 | 7 |
| 8 #include "bindings/core/v8/ScriptPromiseResolver.h" | 8 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" |
| 10 #include "public/platform/WebServiceWorkerCacheStorage.h" |
| 11 #include <v8.h> |
| 10 | 12 |
| 11 namespace WebCore { | 13 namespace WebCore { |
| 12 | 14 |
| 13 PassRefPtr<CacheStorage> CacheStorage::create() | 15 namespace { |
| 16 |
| 17 class BaseCacheStorageCallbacks { |
| 18 protected: |
| 19 typedef blink::WebServiceWorkerCacheStorage::ErrorReason ErrorReason; |
| 20 |
| 21 BaseCacheStorageCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_re
solver(resolver) { } |
| 22 |
| 23 void onError(ErrorReason* reason) |
| 24 { |
| 25 // TODO: Construct correct DOM error objects. |
| 26 const char* errorReasonString = 0; |
| 27 switch (*reason) { |
| 28 case ErrorReason::CacheStorageErrorNotImplemented: |
| 29 errorReasonString = "not implemented"; |
| 30 break; |
| 31 case ErrorReason::CacheStorageErrorNotFound: |
| 32 errorReasonString = "not found"; |
| 33 break; |
| 34 case ErrorReason::CacheStorageErrorExists: |
| 35 errorReasonString = "entry already exists"; |
| 36 break; |
| 37 } |
| 38 |
| 39 m_resolver->reject(errorReasonString); |
| 40 } |
| 41 |
| 42 RefPtr<ScriptPromiseResolver> m_resolver; |
| 43 }; |
| 44 |
| 45 class CacheStorageCallbacks : public BaseCacheStorageCallbacks, public blink::We
bServiceWorkerCacheStorage::CacheStorageCallbacks { |
| 46 public: |
| 47 CacheStorageCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : BaseCach
eStorageCallbacks(resolver) { } |
| 48 virtual ~CacheStorageCallbacks() { } |
| 49 |
| 50 virtual void onSuccess() OVERRIDE |
| 51 { |
| 52 m_resolver->resolve(true); |
| 53 } |
| 54 |
| 55 using BaseCacheStorageCallbacks::onError; |
| 56 }; |
| 57 |
| 58 class CacheStorageCreateCallbacks : public BaseCacheStorageCallbacks, public bli
nk::WebServiceWorkerCacheStorage::CacheStorageCreateCallbacks { |
| 59 public: |
| 60 CacheStorageCreateCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : Ba
seCacheStorageCallbacks(resolver) { } |
| 61 virtual ~CacheStorageCreateCallbacks() { } |
| 62 |
| 63 virtual void onSuccess(int* cacheId) OVERRIDE |
| 64 { |
| 65 // TODO: There should be a blink side of the Cache object implementation
here, rather than |
| 66 // this nonsensical pass through. |
| 67 m_resolver->resolve(*cacheId); |
| 68 } |
| 69 |
| 70 using BaseCacheStorageCallbacks::onError; |
| 71 }; |
| 72 |
| 73 class CacheStorageKeysCallbacks : public BaseCacheStorageCallbacks, public blink
::WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks { |
| 74 public: |
| 75 CacheStorageKeysCallbacks(ScriptState* scriptState, PassRefPtr<ScriptPromise
Resolver> resolver) : BaseCacheStorageCallbacks(resolver), m_scriptState(scriptS
tate) { } |
| 76 virtual ~CacheStorageKeysCallbacks() { } |
| 77 |
| 78 virtual void onSuccess(blink::WebVector<blink::WebString>* keys) OVERRIDE |
| 79 { |
| 80 Vector<String> wtfKeys; |
| 81 for (size_t i = 0; i < keys->size(); ++i) |
| 82 wtfKeys.append((*keys)[i]); |
| 83 m_resolver->resolve(wtfKeys); |
| 84 } |
| 85 |
| 86 using BaseCacheStorageCallbacks::onError; |
| 87 |
| 88 private: |
| 89 const RefPtr<ScriptState> m_scriptState; |
| 90 }; |
| 91 |
| 92 } |
| 93 |
| 94 PassRefPtr<CacheStorage> CacheStorage::create(blink::WebServiceWorkerCacheStorag
e* webCacheStorage) |
| 14 { | 95 { |
| 15 return adoptRef(new CacheStorage()); | 96 return adoptRef(new CacheStorage(webCacheStorage)); |
| 16 } | 97 } |
| 17 | 98 |
| 18 CacheStorage::~CacheStorage() | 99 CacheStorage::~CacheStorage() |
| 19 { | 100 { |
| 20 } | 101 } |
| 21 | 102 |
| 22 // FIXME: Implement every one of these methods. | |
| 23 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin
g& key) | 103 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin
g& key) |
| 24 { | 104 { |
| 25 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 105 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 26 const ScriptPromise promise = resolver->promise(); | 106 const ScriptPromise promise = resolver->promise(); |
| 27 | 107 |
| 28 resolver->reject("not implemented"); | 108 if (m_webCacheStorage) |
| 109 m_webCacheStorage->dispatchCreate(new CacheStorageCreateCallbacks(resolv
er), key); |
| 110 else |
| 111 resolver->reject("no implementation provided"); |
| 29 | 112 |
| 30 return promise; | 113 return promise; |
| 31 } | 114 } |
| 32 | 115 |
| 33 ScriptPromise CacheStorage::rename(ScriptState* scriptState, const String& oldKe
y, const String& newKey) | 116 ScriptPromise CacheStorage::rename(ScriptState* scriptState, const String& oldKe
y, const String& newKey) |
| 34 { | 117 { |
| 35 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 118 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 36 const ScriptPromise promise = resolver->promise(); | 119 const ScriptPromise promise = resolver->promise(); |
| 37 | 120 |
| 38 resolver->reject("not implemented"); | 121 if (m_webCacheStorage) |
| 122 m_webCacheStorage->dispatchRename(new CacheStorageCallbacks(resolver), o
ldKey, newKey); |
| 123 else |
| 124 resolver->reject("no implementation provided"); |
| 39 | 125 |
| 40 return promise; | 126 return promise; |
| 41 } | 127 } |
| 42 | 128 |
| 43 ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& key) | 129 ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& key) |
| 44 { | 130 { |
| 45 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 131 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 46 const ScriptPromise promise = resolver->promise(); | 132 const ScriptPromise promise = resolver->promise(); |
| 47 | 133 |
| 48 resolver->reject("not implemented"); | 134 if (m_webCacheStorage) |
| 135 m_webCacheStorage->dispatchGet(new CacheStorageCallbacks(resolver), key)
; |
| 136 else |
| 137 resolver->reject("no implementation provided"); |
| 49 | 138 |
| 50 return promise; | 139 return promise; |
| 51 } | 140 } |
| 52 | 141 |
| 53 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin
g& key) | 142 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin
g& key) |
| 54 { | 143 { |
| 55 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 144 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 56 const ScriptPromise promise = resolver->promise(); | 145 const ScriptPromise promise = resolver->promise(); |
| 57 | 146 |
| 58 resolver->reject("not implemented"); | 147 if (m_webCacheStorage) |
| 148 m_webCacheStorage->dispatchDelete(new CacheStorageCallbacks(resolver), k
ey); |
| 149 else |
| 150 resolver->reject("no implementation provided"); |
| 59 | 151 |
| 60 return promise; | 152 return promise; |
| 61 } | 153 } |
| 62 | 154 |
| 63 ScriptPromise CacheStorage::keys(ScriptState* scriptState) | 155 ScriptPromise CacheStorage::keys(ScriptState* scriptState) |
| 64 { | 156 { |
| 65 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 157 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 66 const ScriptPromise promise = resolver->promise(); | 158 const ScriptPromise promise = resolver->promise(); |
| 67 | 159 |
| 68 resolver->reject("not implemented"); | 160 if (m_webCacheStorage) |
| 161 m_webCacheStorage->dispatchKeys(new CacheStorageKeysCallbacks(scriptStat
e, resolver)); |
| 162 else |
| 163 resolver->reject("no implementation provided"); |
| 69 | 164 |
| 70 return promise; | 165 return promise; |
| 71 } | 166 } |
| 72 | 167 |
| 73 CacheStorage::CacheStorage() | 168 CacheStorage::CacheStorage(blink::WebServiceWorkerCacheStorage* webCacheStorage)
: m_webCacheStorage(webCacheStorage) |
| 74 { | 169 { |
| 75 ScriptWrappable::init(this); | 170 ScriptWrappable::init(this); |
| 76 } | 171 } |
| 77 | 172 |
| 78 } // namespace WebCore | 173 } // namespace WebCore |
| OLD | NEW |