OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 // | 69 // |
70 // Note: | 70 // Note: |
71 // - This class does not manage its own lifetime. In this example that ownership | 71 // - This class does not manage its own lifetime. In this example that ownership |
72 // of the WebCallbacks instance is being passed in and it is up to the callee | 72 // of the WebCallbacks instance is being passed in and it is up to the callee |
73 // to free the WebCallbacks instance. | 73 // to free the WebCallbacks instance. |
74 // - onSuccess and onError take ownership of the given WebType instance. | 74 // - onSuccess and onError take ownership of the given WebType instance. |
75 template<typename S, typename T> | 75 template<typename S, typename T> |
76 class CallbackPromiseAdapter final : public WebCallbacks<typename S::WebType, ty
pename T::WebType> { | 76 class CallbackPromiseAdapter final : public WebCallbacks<typename S::WebType, ty
pename T::WebType> { |
77 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); | 77 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); |
78 public: | 78 public: |
79 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver
> resolver) | 79 explicit CallbackPromiseAdapter(ScriptPromiseResolver* resolver) |
80 : m_resolver(resolver) | 80 : m_resolver(resolver) |
81 { | 81 { |
82 ASSERT(m_resolver); | 82 ASSERT(m_resolver); |
83 } | 83 } |
84 ~CallbackPromiseAdapter() override { } | 84 ~CallbackPromiseAdapter() override { } |
85 | 85 |
86 // Takes ownership of |result|. | 86 // Takes ownership of |result|. |
87 void onSuccess(typename S::WebType* result) override | 87 void onSuccess(typename S::WebType* result) override |
88 { | 88 { |
89 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result); | 89 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result); |
90 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 90 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
91 return; | 91 return; |
92 if (!result) { | 92 if (!result) { |
93 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate())); | 93 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate())); |
94 return; | 94 return; |
95 } | 95 } |
96 m_resolver->resolve(S::take(m_resolver.get(), ownPtr.release())); | 96 m_resolver->resolve(S::take(m_resolver.get(), ownPtr.release())); |
97 } | 97 } |
98 | 98 |
99 // Takes ownership of |error|. | 99 // Takes ownership of |error|. |
100 void onError(typename T::WebType* error) override | 100 void onError(typename T::WebType* error) override |
101 { | 101 { |
102 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); | 102 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); |
103 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 103 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
104 return; | 104 return; |
105 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); | 105 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); |
106 } | 106 } |
107 | 107 |
108 private: | 108 private: |
109 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; | 109 Persistent<ScriptPromiseResolver> m_resolver; |
110 }; | 110 }; |
111 | 111 |
112 template<typename T> | 112 template<typename T> |
113 class CallbackPromiseAdapter<void, T> final : public WebCallbacks<void, typename
T::WebType> { | 113 class CallbackPromiseAdapter<void, T> final : public WebCallbacks<void, typename
T::WebType> { |
114 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); | 114 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); |
115 public: | 115 public: |
116 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver
> resolver) | 116 explicit CallbackPromiseAdapter(ScriptPromiseResolver* resolver) |
117 : m_resolver(resolver) | 117 : m_resolver(resolver) |
118 { | 118 { |
119 ASSERT(m_resolver); | 119 ASSERT(m_resolver); |
120 } | 120 } |
121 ~CallbackPromiseAdapter() override { } | 121 ~CallbackPromiseAdapter() override { } |
122 | 122 |
123 void onSuccess() override | 123 void onSuccess() override |
124 { | 124 { |
125 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 125 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
126 return; | 126 return; |
127 m_resolver->resolve(); | 127 m_resolver->resolve(); |
128 } | 128 } |
129 | 129 |
130 // Takes ownership of |error|. | 130 // Takes ownership of |error|. |
131 void onError(typename T::WebType* error) override | 131 void onError(typename T::WebType* error) override |
132 { | 132 { |
133 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); | 133 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); |
134 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 134 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
135 return; | 135 return; |
136 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); | 136 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); |
137 } | 137 } |
138 | 138 |
139 private: | 139 private: |
140 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; | 140 Persistent<ScriptPromiseResolver> m_resolver; |
141 }; | 141 }; |
142 | 142 |
143 template<typename S> | 143 template<typename S> |
144 class CallbackPromiseAdapter<S, void> final : public WebCallbacks<typename S::We
bType, void> { | 144 class CallbackPromiseAdapter<S, void> final : public WebCallbacks<typename S::We
bType, void> { |
145 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); | 145 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); |
146 public: | 146 public: |
147 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver
> resolver) | 147 explicit CallbackPromiseAdapter(ScriptPromiseResolver* resolver) |
148 : m_resolver(resolver) | 148 : m_resolver(resolver) |
149 { | 149 { |
150 ASSERT(m_resolver); | 150 ASSERT(m_resolver); |
151 } | 151 } |
152 ~CallbackPromiseAdapter() override { } | 152 ~CallbackPromiseAdapter() override { } |
153 | 153 |
154 // Takes ownership of |result|. | 154 // Takes ownership of |result|. |
155 void onSuccess(typename S::WebType* result) override | 155 void onSuccess(typename S::WebType* result) override |
156 { | 156 { |
157 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result); | 157 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result); |
158 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 158 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
159 return; | 159 return; |
160 m_resolver->resolve(S::take(m_resolver.get(), ownPtr.release())); | 160 m_resolver->resolve(S::take(m_resolver.get(), ownPtr.release())); |
161 } | 161 } |
162 | 162 |
163 void onError() override | 163 void onError() override |
164 { | 164 { |
165 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 165 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
166 return; | 166 return; |
167 m_resolver->reject(); | 167 m_resolver->reject(); |
168 } | 168 } |
169 | 169 |
170 private: | 170 private: |
171 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; | 171 Persistent<ScriptPromiseResolver> m_resolver; |
172 }; | 172 }; |
173 | 173 |
174 template<typename T> | 174 template<typename T> |
175 class CallbackPromiseAdapter<bool, T> final : public WebCallbacks<bool, typename
T::WebType> { | 175 class CallbackPromiseAdapter<bool, T> final : public WebCallbacks<bool, typename
T::WebType> { |
176 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); | 176 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); |
177 public: | 177 public: |
178 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver
> resolver) | 178 explicit CallbackPromiseAdapter(ScriptPromiseResolver* resolver) |
179 : m_resolver(resolver) | 179 : m_resolver(resolver) |
180 { | 180 { |
181 ASSERT(m_resolver); | 181 ASSERT(m_resolver); |
182 } | 182 } |
183 ~CallbackPromiseAdapter() override { } | 183 ~CallbackPromiseAdapter() override { } |
184 | 184 |
185 // TODO(nhiroki): onSuccess should take ownership of a bool object for | 185 // TODO(nhiroki): onSuccess should take ownership of a bool object for |
186 // consistency. (http://crbug.com/493531) | 186 // consistency. (http://crbug.com/493531) |
187 void onSuccess(bool* result) override | 187 void onSuccess(bool* result) override |
188 { | 188 { |
189 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 189 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
190 return; | 190 return; |
191 m_resolver->resolve(*result); | 191 m_resolver->resolve(*result); |
192 } | 192 } |
193 | 193 |
194 // Takes ownership of |error|. | 194 // Takes ownership of |error|. |
195 void onError(typename T::WebType* error) override | 195 void onError(typename T::WebType* error) override |
196 { | 196 { |
197 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); | 197 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); |
198 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 198 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
199 return; | 199 return; |
200 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); | 200 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); |
201 } | 201 } |
202 | 202 |
203 private: | 203 private: |
204 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; | 204 Persistent<ScriptPromiseResolver> m_resolver; |
205 }; | 205 }; |
206 | 206 |
207 template<> | 207 template<> |
208 class CallbackPromiseAdapter<void, void> final : public WebCallbacks<void, void>
{ | 208 class CallbackPromiseAdapter<void, void> final : public WebCallbacks<void, void>
{ |
209 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); | 209 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); |
210 public: | 210 public: |
211 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver
> resolver) | 211 explicit CallbackPromiseAdapter(ScriptPromiseResolver* resolver) |
212 : m_resolver(resolver) | 212 : m_resolver(resolver) |
213 { | 213 { |
214 ASSERT(m_resolver); | 214 ASSERT(m_resolver); |
215 } | 215 } |
216 ~CallbackPromiseAdapter() override { } | 216 ~CallbackPromiseAdapter() override { } |
217 | 217 |
218 void onSuccess() override | 218 void onSuccess() override |
219 { | 219 { |
220 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 220 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
221 return; | 221 return; |
222 m_resolver->resolve(); | 222 m_resolver->resolve(); |
223 } | 223 } |
224 | 224 |
225 void onError() override | 225 void onError() override |
226 { | 226 { |
227 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 227 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
228 return; | 228 return; |
229 m_resolver->reject(); | 229 m_resolver->reject(); |
230 } | 230 } |
231 | 231 |
232 private: | 232 private: |
233 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; | 233 Persistent<ScriptPromiseResolver> m_resolver; |
234 }; | 234 }; |
235 | 235 |
236 template<> | 236 template<> |
237 class CallbackPromiseAdapter<bool, void> final : public WebCallbacks<bool, void>
{ | 237 class CallbackPromiseAdapter<bool, void> final : public WebCallbacks<bool, void>
{ |
238 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); | 238 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); |
239 public: | 239 public: |
240 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver
> resolver) | 240 explicit CallbackPromiseAdapter(ScriptPromiseResolver* resolver) |
241 : m_resolver(resolver) | 241 : m_resolver(resolver) |
242 { | 242 { |
243 ASSERT(m_resolver); | 243 ASSERT(m_resolver); |
244 } | 244 } |
245 ~CallbackPromiseAdapter() override { } | 245 ~CallbackPromiseAdapter() override { } |
246 | 246 |
247 // TODO(nhiroki): onSuccess should take ownership of a bool object for | 247 // TODO(nhiroki): onSuccess should take ownership of a bool object for |
248 // consistency. (http://crbug.com/493531) | 248 // consistency. (http://crbug.com/493531) |
249 void onSuccess(bool* result) override | 249 void onSuccess(bool* result) override |
250 { | 250 { |
251 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 251 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
252 return; | 252 return; |
253 m_resolver->resolve(*result); | 253 m_resolver->resolve(*result); |
254 } | 254 } |
255 | 255 |
256 void onError() override | 256 void onError() override |
257 { | 257 { |
258 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 258 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) |
259 return; | 259 return; |
260 m_resolver->reject(); | 260 m_resolver->reject(); |
261 } | 261 } |
262 | 262 |
263 private: | 263 private: |
264 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; | 264 Persistent<ScriptPromiseResolver> m_resolver; |
265 }; | 265 }; |
266 | 266 |
267 } // namespace blink | 267 } // namespace blink |
268 | 268 |
269 #endif | 269 #endif |
OLD | NEW |