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> | |
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(WebServiceWorkerCacheStorage::CacheStorage Error reason) | |
14 { | 20 { |
15 return adoptRefWillBeNoop(new CacheStorage()); | 21 // TODO: Construct correct DOM error objects rather than returning strings. |
22 switch (reason) { | |
23 case WebServiceWorkerCacheStorage::CacheStorageError::CacheStorageErrorNotIm plemented: | |
24 return "not implemented"; | |
25 case WebServiceWorkerCacheStorage::CacheStorageError::CacheStorageErrorNotFo und: | |
26 return "not found"; | |
27 case WebServiceWorkerCacheStorage::CacheStorageError::CacheStorageErrorExist s: | |
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(WebServiceWorkerCacheStorage::CacheStorageError* 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(WebServiceWorkerCacheStorage::CacheStorageError* 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(WebServiceWorkerCacheStorage::CacheStorageError* 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(blink::WebServiceWorkerCacheStorag e* webCacheStorage) | |
michaeln
2014/07/25 20:25:19
shouldn't need the blink:: here
gavinp
2014/07/28 02:10:16
Done, and one more below.
| |
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(blink::WebServiceWorkerCacheStorage* webCacheStorage) : m_webCacheStorage(webCacheStorage) |
michaeln
2014/07/25 20:25:19
or here
gavinp
2014/07/28 02:10:16
Done.
| |
70 { | 171 { |
71 ScriptWrappable::init(this); | 172 ScriptWrappable::init(this); |
72 } | 173 } |
73 | 174 |
74 } // namespace WebCore | 175 } // namespace WebCore |
OLD | NEW |