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 CacheStorageWithCacheCallbacks : public BaseCacheStorageCallbacks, public
blink::WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks { |
| 59 public: |
| 60 CacheStorageWithCacheCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) :
BaseCacheStorageCallbacks(resolver) { } |
| 61 virtual ~CacheStorageWithCacheCallbacks() { } |
| 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 CacheStorageWithCacheCallbacks(res
olver), 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 CacheStorageWithCacheCallbacks(resolv
er), 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 |