Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Side by Side Diff: Source/modules/serviceworkers/CacheStorage.cpp

Issue 380923002: Introducing the WebServiceWorkerCacheStorage. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: api fixes Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698