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 "public/platform/WebServiceWorkerCacheStorageError.h" |
| 12 |
| 13 using blink::WebServiceWorkerCacheStorage; |
10 | 14 |
11 namespace WebCore { | 15 namespace WebCore { |
12 | 16 |
13 PassRefPtrWillBeRawPtr<CacheStorage> CacheStorage::create() | 17 namespace { |
| 18 |
| 19 const char* CacheStorageErrorToString(WebServiceWorkerCacheStorageError reason) |
14 { | 20 { |
15 return adoptRefWillBeNoop(new CacheStorage()); | 21 // TODO: Construct correct DOM error objects rather than returning strings. |
| 22 switch (reason) { |
| 23 case WebServiceWorkerCacheStorageError::WebServiceWorkerCacheStorageErrorNot
Implemented: |
| 24 return "not implemented"; |
| 25 case WebServiceWorkerCacheStorageError::WebServiceWorkerCacheStorageErrorNot
Found: |
| 26 return "not found"; |
| 27 case WebServiceWorkerCacheStorageError::WebServiceWorkerCacheStorageErrorExi
sts: |
| 28 return "entry already exists"; |
| 29 default: |
| 30 ASSERT_NOT_REACHED(); |
| 31 return "unknown error"; |
| 32 } |
16 } | 33 } |
17 | 34 |
18 // FIXME: Implement every one of these methods. | 35 class CacheStorageCallbacks : public WebServiceWorkerCacheStorage::CacheStorageC
allbacks { |
| 36 public: |
| 37 CacheStorageCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_resolv
er(resolver) { } |
| 38 virtual ~CacheStorageCallbacks() { } |
| 39 |
| 40 virtual void onSuccess() OVERRIDE |
| 41 { |
| 42 m_resolver->resolve(true); |
| 43 } |
| 44 |
| 45 virtual void onError(WebServiceWorkerCacheStorageError* reason) OVERRIDE |
| 46 { |
| 47 m_resolver->reject(CacheStorageErrorToString(*reason)); |
| 48 } |
| 49 |
| 50 private: |
| 51 const RefPtr<ScriptPromiseResolver> m_resolver; |
| 52 }; |
| 53 |
| 54 class CacheStorageWithCacheCallbacks : public WebServiceWorkerCacheStorage::Cach
eStorageWithCacheCallbacks { |
| 55 public: |
| 56 CacheStorageWithCacheCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) :
m_resolver(resolver) { } |
| 57 virtual ~CacheStorageWithCacheCallbacks() { } |
| 58 |
| 59 virtual void onSuccess(int* cacheId) OVERRIDE |
| 60 { |
| 61 // TODO: There should be a blink side of the Cache object implementation
here, rather than |
| 62 // this nonsensical pass through. |
| 63 m_resolver->resolve(*cacheId); |
| 64 } |
| 65 |
| 66 virtual void onError(WebServiceWorkerCacheStorageError* reason) OVERRIDE |
| 67 { |
| 68 m_resolver->reject(CacheStorageErrorToString(*reason)); |
| 69 } |
| 70 |
| 71 private: |
| 72 const RefPtr<ScriptPromiseResolver> m_resolver; |
| 73 }; |
| 74 |
| 75 class CacheStorageKeysCallbacks : public WebServiceWorkerCacheStorage::CacheStor
ageKeysCallbacks { |
| 76 public: |
| 77 CacheStorageKeysCallbacks(ScriptState* scriptState, PassRefPtr<ScriptPromise
Resolver> resolver) : m_resolver(resolver), m_scriptState(scriptState) { } |
| 78 virtual ~CacheStorageKeysCallbacks() { } |
| 79 |
| 80 virtual void onSuccess(blink::WebVector<blink::WebString>* keys) OVERRIDE |
| 81 { |
| 82 Vector<String> wtfKeys; |
| 83 for (size_t i = 0; i < keys->size(); ++i) |
| 84 wtfKeys.append((*keys)[i]); |
| 85 m_resolver->resolve(wtfKeys); |
| 86 } |
| 87 |
| 88 virtual void onError(WebServiceWorkerCacheStorageError* reason) OVERRIDE |
| 89 { |
| 90 m_resolver->reject(CacheStorageErrorToString(*reason)); |
| 91 } |
| 92 |
| 93 private: |
| 94 const RefPtr<ScriptPromiseResolver> m_resolver; |
| 95 const RefPtr<ScriptState> m_scriptState; |
| 96 }; |
| 97 |
| 98 } |
| 99 |
| 100 PassRefPtr<CacheStorage> CacheStorage::create(WebServiceWorkerCacheStorage* webC
acheStorage) |
| 101 { |
| 102 return adoptRefWillBeNoop(new CacheStorage(webCacheStorage)); |
| 103 } |
| 104 |
19 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin
g& key) | 105 ScriptPromise CacheStorage::createFunction(ScriptState* scriptState, const Strin
g& key) |
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->dispatchCreate(new CacheStorageWithCacheCallbacks(res
olver), key); |
| 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::rename(ScriptState* scriptState, const String& oldKe
y, const String& newKey) |
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->dispatchRename(new CacheStorageCallbacks(resolver), o
ldKey, newKey); |
| 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::get(ScriptState* scriptState, const String& key) |
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->dispatchGet(new CacheStorageWithCacheCallbacks(resolv
er), key); |
| 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& key) |
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), k
ey); |
| 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(scriptStat
e, 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 WebCore | 175 } // namespace WebCore |
OLD | NEW |