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

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

Issue 424643002: Introducing the WebServiceWorkerCacheStorage (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: combine with prior CL Created 6 years, 4 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "modules/serviceworkers/FetchStores.h"
7
8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ScriptState.h"
10 #include "public/platform/WebServiceWorkerFetchStores.h"
11 #include "public/platform/WebServiceWorkerFetchStoresError.h"
12
13 namespace blink {
14
15 namespace {
16
17 const char* FetchStoresErrorToString(WebServiceWorkerFetchStoresError reason)
18 {
19 // TODO: Construct correct DOM error objects rather than returning strings.
falken 2014/07/30 02:14:09 blink world says FIXME
gavinp 2014/08/05 08:09:11 Done.
20 switch (reason) {
21 case WebServiceWorkerFetchStoresError::WebServiceWorkerFetchStoresErrorNotIm plemented:
22 return "not implemented";
23 case WebServiceWorkerFetchStoresError::WebServiceWorkerFetchStoresErrorNotFo und:
24 return "not found";
25 case WebServiceWorkerFetchStoresError::WebServiceWorkerFetchStoresErrorExist s:
26 return "entry already exists";
27 default:
28 ASSERT_NOT_REACHED();
29 return "unknown error";
30 }
31 }
32
33 class FetchStoresCallbacks : public WebServiceWorkerFetchStores::FetchStoresCall backs {
34 public:
35 FetchStoresCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) : m_resolve r(resolver) { }
36 virtual ~FetchStoresCallbacks() { }
37
38 virtual void onSuccess() OVERRIDE
39 {
40 m_resolver->resolve(true);
41 }
42
43 virtual void onError(WebServiceWorkerFetchStoresError* reason) OVERRIDE
44 {
45 m_resolver->reject(FetchStoresErrorToString(*reason));
46 }
47
48 private:
49 const RefPtr<ScriptPromiseResolver> m_resolver;
50 };
51
52 class FetchStoresWithFetchStoreCallbacks : public WebServiceWorkerFetchStores::F etchStoresWithFetchStoreCallbacks {
53 public:
54 FetchStoresWithFetchStoreCallbacks(PassRefPtr<ScriptPromiseResolver> resolve r) : m_resolver(resolver) { }
55 virtual ~FetchStoresWithFetchStoreCallbacks() { }
56
57 virtual void onSuccess(int* fetchStoreID) OVERRIDE
58 {
59 // TODO: There should be a blink side of the Cache object implementation here, rather than
falken 2014/07/30 02:14:09 FIXME
gavinp 2014/08/05 08:09:11 Done.
60 // this nonsensical pass through.
61 m_resolver->resolve(*fetchStoreID);
62 }
63
64 virtual void onError(WebServiceWorkerFetchStoresError* reason) OVERRIDE
65 {
66 m_resolver->reject(FetchStoresErrorToString(*reason));
67 }
68
69 private:
70 const RefPtr<ScriptPromiseResolver> m_resolver;
71 };
72
73 class FetchStoresKeysCallbacks : public WebServiceWorkerFetchStores::FetchStores KeysCallbacks {
74 public:
75 FetchStoresKeysCallbacks(ScriptState* scriptState, PassRefPtr<ScriptPromiseR esolver> resolver) : m_resolver(resolver), m_scriptState(scriptState) { }
76 virtual ~FetchStoresKeysCallbacks() { }
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 virtual void onError(WebServiceWorkerFetchStoresError* reason) OVERRIDE
87 {
88 m_resolver->reject(FetchStoresErrorToString(*reason));
89 }
90
91 private:
92 const RefPtr<ScriptPromiseResolver> m_resolver;
93 const RefPtr<ScriptState> m_scriptState;
94 };
95
96 }
97
98 PassRefPtr<FetchStores> FetchStores::create(WebServiceWorkerFetchStores* webFetc hStores)
99 {
100 return adoptRefWillBeNoop(new FetchStores(webFetchStores));
101 }
102
103 ScriptPromise FetchStores::get(ScriptState* scriptState, const String& fetchStor eName)
104 {
105 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
106 const ScriptPromise promise = resolver->promise();
107
108 if (m_webFetchStores)
109 m_webFetchStores->dispatchGet(new FetchStoresWithFetchStoreCallbacks(res olver), fetchStoreName);
110 else
111 resolver->reject("no implementation provided");
112
113 return promise;
114 }
115
116 ScriptPromise FetchStores::has(ScriptState* scriptState, const String& fetchStor eName)
117 {
118 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
119 const ScriptPromise promise = resolver->promise();
120
121 if (m_webFetchStores)
122 m_webFetchStores->dispatchHas(new FetchStoresCallbacks(resolver), fetchS toreName);
123 else
124 resolver->reject("no implementation provided");
125
126 return promise;
127 }
128
129 ScriptPromise FetchStores::createFunction(ScriptState* scriptState, const String & fetchStoreName)
130 {
131 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
132 const ScriptPromise promise = resolver->promise();
133
134 if (m_webFetchStores)
135 m_webFetchStores->dispatchCreate(new FetchStoresWithFetchStoreCallbacks( resolver), fetchStoreName);
136 else
137 resolver->reject("no implementation provided");
138
139 return promise;
140 }
141
142 ScriptPromise FetchStores::deleteFunction(ScriptState* scriptState, const String & fetchStoreName)
143 {
144 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
145 const ScriptPromise promise = resolver->promise();
146
147 if (m_webFetchStores)
148 m_webFetchStores->dispatchDelete(new FetchStoresCallbacks(resolver), fet chStoreName);
149 else
150 resolver->reject("no implementation provided");
151
152 return promise;
153 }
154
155 ScriptPromise FetchStores::keys(ScriptState* scriptState)
156 {
157 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
158 const ScriptPromise promise = resolver->promise();
159
160 if (m_webFetchStores)
161 m_webFetchStores->dispatchKeys(new FetchStoresKeysCallbacks(scriptState, resolver));
162 else
163 resolver->reject("no implementation provided");
164
165 return promise;
166 }
167
168 FetchStores::FetchStores(WebServiceWorkerFetchStores* webFetchStores) : m_webFet chStores(webFetchStores)
169 {
170 ScriptWrappable::init(this);
171 }
172
173 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/serviceworkers/FetchStores.h ('k') | Source/modules/serviceworkers/FetchStores.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698