Chromium Code Reviews| 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/WebServiceWorkerCacheError.h" | |
| 11 #include "public/platform/WebServiceWorkerCacheStorage.h" | |
| 10 | 12 |
| 11 namespace blink { | 13 namespace blink { |
| 12 | 14 |
| 13 PassRefPtrWillBeRawPtr<CacheStorage> CacheStorage::create() | 15 namespace { |
| 16 | |
| 17 const char* CacheErrorToString(WebServiceWorkerCacheError reason) | |
| 14 { | 18 { |
| 15 return adoptRefWillBeNoop(new CacheStorage()); | 19 // FIXME: Construct correct DOM error objects rather than returning strings. |
| 20 switch (reason) { | |
| 21 case WebServiceWorkerCacheError::WebServiceWorkerCacheErrorNotImplemented: | |
| 22 return "not implemented"; | |
| 23 case WebServiceWorkerCacheError::WebServiceWorkerCacheErrorNotFound: | |
| 24 return "not found"; | |
| 25 case WebServiceWorkerCacheError::WebServiceWorkerCacheErrorExists: | |
| 26 return "entry already exists"; | |
| 27 default: | |
| 28 ASSERT_NOT_REACHED(); | |
| 29 return "unknown error"; | |
| 30 } | |
| 16 } | 31 } |
| 17 | 32 |
| 18 // FIXME: Implement every one of these methods. | 33 class CacheStorageCallbacks : public WebServiceWorkerCacheStorage::CacheStorageC allbacks { |
| 19 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin g& key) | 34 public: |
|
jochen (gone - plz use gerrit)
2014/08/05 08:51:56
wtf_make_noncopyable
gavinp
2014/08/05 09:09:23
Done.
| |
| 35 CacheStorageCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_resolv er(resolver) { } | |
|
jochen (gone - plz use gerrit)
2014/08/05 08:51:56
explicit
gavinp
2014/08/05 09:09:23
Done.
| |
| 36 virtual ~CacheStorageCallbacks() { } | |
| 37 | |
| 38 virtual void onSuccess() OVERRIDE | |
| 39 { | |
| 40 m_resolver->resolve(true); | |
| 41 } | |
| 42 | |
| 43 virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE | |
| 44 { | |
| 45 m_resolver->reject(CacheErrorToString(*reason)); | |
| 46 } | |
| 47 | |
| 48 private: | |
| 49 const RefPtr<ScriptPromiseResolver> m_resolver; | |
| 50 }; | |
| 51 | |
| 52 class CacheStorageWithCacheCallbacks : public WebServiceWorkerCacheStorage::Cach eStorageWithCacheCallbacks { | |
| 53 public: | |
| 54 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.
| |
| 55 virtual ~CacheStorageWithCacheCallbacks() { } | |
| 56 | |
| 57 virtual void onSuccess(WebServiceWorkerCache* cache) OVERRIDE | |
| 58 { | |
| 59 // FIXME: There should be a blink side of the Cache object implementatio n here, rather than | |
| 60 // this nonsensical return. | |
| 61 m_resolver->resolve("succesfully returned a cache"); | |
| 62 } | |
| 63 | |
| 64 virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE | |
| 65 { | |
| 66 m_resolver->reject(CacheErrorToString(*reason)); | |
| 67 } | |
| 68 | |
| 69 private: | |
| 70 const RefPtr<ScriptPromiseResolver> m_resolver; | |
| 71 }; | |
| 72 | |
| 73 class CacheStorageKeysCallbacks : public WebServiceWorkerCacheStorage::CacheStor ageKeysCallbacks { | |
| 74 public: | |
| 75 CacheStorageKeysCallbacks(ScriptState* scriptState, PassRefPtr<ScriptPromise Resolver> resolver) : m_resolver(resolver), m_scriptState(scriptState) { } | |
|
gavinp
2014/08/05 09:09:23
Here too after I removed the unused param.
| |
| 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 virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE | |
| 87 { | |
| 88 m_resolver->reject(CacheErrorToString(*reason)); | |
| 89 } | |
| 90 | |
| 91 private: | |
| 92 const RefPtr<ScriptPromiseResolver> m_resolver; | |
| 93 const RefPtr<ScriptState> m_scriptState; | |
| 94 }; | |
| 95 | |
| 96 } | |
| 97 | |
| 98 PassRefPtr<CacheStorage> CacheStorage::create(WebServiceWorkerCacheStorage* webC acheStorage) | |
| 99 { | |
| 100 return adoptRefWillBeNoop(new CacheStorage(webCacheStorage)); | |
| 101 } | |
| 102 | |
| 103 ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& cacheNam e) | |
| 20 { | 104 { |
| 21 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); | 105 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); |
| 22 const ScriptPromise promise = resolver->promise(); | 106 const ScriptPromise promise = resolver->promise(); |
| 23 | 107 |
| 24 resolver->reject("not implemented"); | 108 if (m_webCacheStorage) |
| 109 m_webCacheStorage->dispatchGet(new CacheStorageWithCacheCallbacks(resolv er), cacheName); | |
| 110 else | |
| 111 resolver->reject("no implementation provided"); | |
| 25 | 112 |
| 26 return promise; | 113 return promise; |
| 27 } | 114 } |
| 28 | 115 |
| 29 ScriptPromise CacheStorage::rename(ScriptState* scriptState, const String& oldKe y, const String& newKey) | 116 ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheNam e) |
| 30 { | 117 { |
| 31 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); | 118 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); |
| 32 const ScriptPromise promise = resolver->promise(); | 119 const ScriptPromise promise = resolver->promise(); |
| 33 | 120 |
| 34 resolver->reject("not implemented"); | 121 if (m_webCacheStorage) |
| 122 m_webCacheStorage->dispatchHas(new CacheStorageCallbacks(resolver), cach eName); | |
| 123 else | |
| 124 resolver->reject("no implementation provided"); | |
| 35 | 125 |
| 36 return promise; | 126 return promise; |
| 37 } | 127 } |
| 38 | 128 |
| 39 ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& key) | 129 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin g& cacheName) |
| 40 { | 130 { |
| 41 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); | 131 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); |
| 42 const ScriptPromise promise = resolver->promise(); | 132 const ScriptPromise promise = resolver->promise(); |
| 43 | 133 |
| 44 resolver->reject("not implemented"); | 134 if (m_webCacheStorage) |
| 135 m_webCacheStorage->dispatchCreate(new CacheStorageWithCacheCallbacks(res olver), cacheName); | |
| 136 else | |
| 137 resolver->reject("no implementation provided"); | |
| 45 | 138 |
| 46 return promise; | 139 return promise; |
| 47 } | 140 } |
| 48 | 141 |
| 49 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin g& key) | 142 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin g& cacheName) |
| 50 { | 143 { |
| 51 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); | 144 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); |
| 52 const ScriptPromise promise = resolver->promise(); | 145 const ScriptPromise promise = resolver->promise(); |
| 53 | 146 |
| 54 resolver->reject("not implemented"); | 147 if (m_webCacheStorage) |
| 148 m_webCacheStorage->dispatchDelete(new CacheStorageCallbacks(resolver), c acheName); | |
| 149 else | |
| 150 resolver->reject("no implementation provided"); | |
| 55 | 151 |
| 56 return promise; | 152 return promise; |
| 57 } | 153 } |
| 58 | 154 |
| 59 ScriptPromise CacheStorage::keys(ScriptState* scriptState) | 155 ScriptPromise CacheStorage::keys(ScriptState* scriptState) |
| 60 { | 156 { |
| 61 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); | 157 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); |
| 62 const ScriptPromise promise = resolver->promise(); | 158 const ScriptPromise promise = resolver->promise(); |
| 63 | 159 |
| 64 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"); | |
| 65 | 164 |
| 66 return promise; | 165 return promise; |
| 67 } | 166 } |
| 68 | 167 |
| 69 CacheStorage::CacheStorage() | 168 CacheStorage::CacheStorage(WebServiceWorkerCacheStorage* webCacheStorage) : m_we bCacheStorage(webCacheStorage) |
| 70 { | 169 { |
| 71 ScriptWrappable::init(this); | 170 ScriptWrappable::init(this); |
| 72 } | 171 } |
| 73 | 172 |
| 74 } // namespace blink | 173 } // namespace blink |
| OLD | NEW |