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 WTF_MAKE_NONCOPYABLE(CacheStorageCallbacks); |
| 35 public: |
| 36 explicit CacheStorageCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) :
m_resolver(resolver) { } |
| 37 virtual ~CacheStorageCallbacks() { } |
| 38 |
| 39 virtual void onSuccess() OVERRIDE |
| 40 { |
| 41 m_resolver->resolve(true); |
| 42 } |
| 43 |
| 44 virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE |
| 45 { |
| 46 m_resolver->reject(CacheErrorToString(*reason)); |
| 47 } |
| 48 |
| 49 private: |
| 50 const RefPtr<ScriptPromiseResolver> m_resolver; |
| 51 }; |
| 52 |
| 53 class CacheStorageWithCacheCallbacks : public WebServiceWorkerCacheStorage::Cach
eStorageWithCacheCallbacks { |
| 54 WTF_MAKE_NONCOPYABLE(CacheStorageWithCacheCallbacks); |
| 55 public: |
| 56 explicit CacheStorageWithCacheCallbacks(PassRefPtr<ScriptPromiseResolver> re
solver) : m_resolver(resolver) { } |
| 57 virtual ~CacheStorageWithCacheCallbacks() { } |
| 58 |
| 59 virtual void onSuccess(WebServiceWorkerCache* cache) OVERRIDE |
| 60 { |
| 61 // FIXME: There should be a blink side of the Cache object implementatio
n here, rather than |
| 62 // this nonsensical return. |
| 63 m_resolver->resolve("succesfully returned a cache"); |
| 64 } |
| 65 |
| 66 virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE |
| 67 { |
| 68 m_resolver->reject(CacheErrorToString(*reason)); |
| 69 } |
| 70 |
| 71 private: |
| 72 const RefPtr<ScriptPromiseResolver> m_resolver; |
| 73 }; |
| 74 |
| 75 class CacheStorageKeysCallbacks : public WebServiceWorkerCacheStorage::CacheStor
ageKeysCallbacks { |
| 76 WTF_MAKE_NONCOPYABLE(CacheStorageKeysCallbacks); |
| 77 public: |
| 78 explicit CacheStorageKeysCallbacks(PassRefPtr<ScriptPromiseResolver> resolve
r) : m_resolver(resolver) { } |
| 79 virtual ~CacheStorageKeysCallbacks() { } |
| 80 |
| 81 virtual void onSuccess(blink::WebVector<blink::WebString>* keys) OVERRIDE |
| 82 { |
| 83 Vector<String> wtfKeys; |
| 84 for (size_t i = 0; i < keys->size(); ++i) |
| 85 wtfKeys.append((*keys)[i]); |
| 86 m_resolver->resolve(wtfKeys); |
| 87 } |
| 88 |
| 89 virtual void onError(WebServiceWorkerCacheError* reason) OVERRIDE |
| 90 { |
| 91 m_resolver->reject(CacheErrorToString(*reason)); |
| 92 } |
| 93 |
| 94 private: |
| 95 const RefPtr<ScriptPromiseResolver> m_resolver; |
| 96 }; |
| 97 |
| 98 } |
| 99 |
| 100 PassRefPtr<CacheStorage> CacheStorage::create(WebServiceWorkerCacheStorage* webC
acheStorage) |
| 101 { |
| 102 return adoptRefWillBeNoop(new CacheStorage(webCacheStorage)); |
| 103 } |
| 104 |
| 105 ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& cacheNam
e) |
20 { | 106 { |
21 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 107 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
22 const ScriptPromise promise = resolver->promise(); | 108 const ScriptPromise promise = resolver->promise(); |
23 | 109 |
24 resolver->reject("not implemented"); | 110 if (m_webCacheStorage) |
| 111 m_webCacheStorage->dispatchGet(new CacheStorageWithCacheCallbacks(resolv
er), cacheName); |
| 112 else |
| 113 resolver->reject("no implementation provided"); |
25 | 114 |
26 return promise; | 115 return promise; |
27 } | 116 } |
28 | 117 |
29 ScriptPromise CacheStorage::rename(ScriptState* scriptState, const String& oldKe
y, const String& newKey) | 118 ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheNam
e) |
30 { | 119 { |
31 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 120 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
32 const ScriptPromise promise = resolver->promise(); | 121 const ScriptPromise promise = resolver->promise(); |
33 | 122 |
34 resolver->reject("not implemented"); | 123 if (m_webCacheStorage) |
| 124 m_webCacheStorage->dispatchHas(new CacheStorageCallbacks(resolver), cach
eName); |
| 125 else |
| 126 resolver->reject("no implementation provided"); |
35 | 127 |
36 return promise; | 128 return promise; |
37 } | 129 } |
38 | 130 |
39 ScriptPromise CacheStorage::get(ScriptState* scriptState, const String& key) | 131 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin
g& cacheName) |
40 { | 132 { |
41 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 133 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
42 const ScriptPromise promise = resolver->promise(); | 134 const ScriptPromise promise = resolver->promise(); |
43 | 135 |
44 resolver->reject("not implemented"); | 136 if (m_webCacheStorage) |
| 137 m_webCacheStorage->dispatchCreate(new CacheStorageWithCacheCallbacks(res
olver), cacheName); |
| 138 else |
| 139 resolver->reject("no implementation provided"); |
45 | 140 |
46 return promise; | 141 return promise; |
47 } | 142 } |
48 | 143 |
49 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin
g& key) | 144 ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin
g& cacheName) |
50 { | 145 { |
51 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 146 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
52 const ScriptPromise promise = resolver->promise(); | 147 const ScriptPromise promise = resolver->promise(); |
53 | 148 |
54 resolver->reject("not implemented"); | 149 if (m_webCacheStorage) |
| 150 m_webCacheStorage->dispatchDelete(new CacheStorageCallbacks(resolver), c
acheName); |
| 151 else |
| 152 resolver->reject("no implementation provided"); |
55 | 153 |
56 return promise; | 154 return promise; |
57 } | 155 } |
58 | 156 |
59 ScriptPromise CacheStorage::keys(ScriptState* scriptState) | 157 ScriptPromise CacheStorage::keys(ScriptState* scriptState) |
60 { | 158 { |
61 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 159 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
62 const ScriptPromise promise = resolver->promise(); | 160 const ScriptPromise promise = resolver->promise(); |
63 | 161 |
64 resolver->reject("not implemented"); | 162 if (m_webCacheStorage) |
| 163 m_webCacheStorage->dispatchKeys(new CacheStorageKeysCallbacks(resolver))
; |
| 164 else |
| 165 resolver->reject("no implementation provided"); |
65 | 166 |
66 return promise; | 167 return promise; |
67 } | 168 } |
68 | 169 |
69 CacheStorage::CacheStorage() | 170 CacheStorage::CacheStorage(WebServiceWorkerCacheStorage* webCacheStorage) : m_we
bCacheStorage(webCacheStorage) |
70 { | 171 { |
71 ScriptWrappable::init(this); | 172 ScriptWrappable::init(this); |
72 } | 173 } |
73 | 174 |
74 } // namespace blink | 175 } // namespace blink |
OLD | NEW |