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

Side by Side Diff: Source/bindings/core/v8/CallbackPromiseAdapter.h

Issue 1222103006: (WONT COMMIT) Make CallbackPromiseAdapter accept a bool object passed by value (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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
OLDNEW
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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 // 64 //
65 // Now when calling into a WebKit API that requires a WebCallbacks<blink::WebMyC lass, blink::WebMyClass>*: 65 // Now when calling into a WebKit API that requires a WebCallbacks<blink::WebMyC lass, blink::WebMyClass>*:
66 // 66 //
67 // // call signature: callSomeMethod(WebCallbacks<MyClass, MyClass>* callback s) 67 // // call signature: callSomeMethod(WebCallbacks<MyClass, MyClass>* callback s)
68 // webObject->callSomeMethod(new CallbackPromiseAdapter<MyClass, MyClass>(res olver, scriptExecutionContext)); 68 // webObject->callSomeMethod(new CallbackPromiseAdapter<MyClass, MyClass>(res olver, scriptExecutionContext));
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(typename S::WebType*) and onError(typename T::WebType*) take
75 // ownership of the given WebType instance.
75 template<typename S, typename T> 76 template<typename S, typename T>
76 class CallbackPromiseAdapter final : public WebCallbacks<typename S::WebType, ty pename T::WebType> { 77 class CallbackPromiseAdapter final : public WebCallbacks<typename S::WebType, ty pename T::WebType> {
77 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); 78 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter);
78 public: 79 public:
79 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver) 80 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver)
80 : m_resolver(resolver) 81 : m_resolver(resolver)
81 { 82 {
82 ASSERT(m_resolver); 83 ASSERT(m_resolver);
83 } 84 }
84 virtual ~CallbackPromiseAdapter() { } 85 virtual ~CallbackPromiseAdapter() { }
85 86
87 virtual void onSuccess(typename S::WebType result) override
88 {
89 ASSERT_NOT_REACHED();
90 }
91
86 // Takes ownership of |result|. 92 // Takes ownership of |result|.
87 virtual void onSuccess(typename S::WebType* result) override 93 virtual void onSuccess(typename S::WebType* result) override
88 { 94 {
89 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result); 95 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result);
90 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 96 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
91 return; 97 return;
92 if (!result) { 98 if (!result) {
93 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate())); 99 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate()));
94 return; 100 return;
95 } 101 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 class CallbackPromiseAdapter<S, void> final : public WebCallbacks<typename S::We bType, void> { 150 class CallbackPromiseAdapter<S, void> final : public WebCallbacks<typename S::We bType, void> {
145 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); 151 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter);
146 public: 152 public:
147 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver) 153 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver)
148 : m_resolver(resolver) 154 : m_resolver(resolver)
149 { 155 {
150 ASSERT(m_resolver); 156 ASSERT(m_resolver);
151 } 157 }
152 virtual ~CallbackPromiseAdapter() { } 158 virtual ~CallbackPromiseAdapter() { }
153 159
160 virtual void onSuccess(typename S::WebType result) override
161 {
162 ASSERT_NOT_REACHED();
163 }
164
154 // Takes ownership of |result|. 165 // Takes ownership of |result|.
155 virtual void onSuccess(typename S::WebType* result) override 166 virtual void onSuccess(typename S::WebType* result) override
156 { 167 {
157 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result); 168 OwnPtr<typename S::WebType> ownPtr = adoptPtr(result);
158 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 169 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
159 return; 170 return;
160 m_resolver->resolve(S::take(m_resolver.get(), ownPtr.release())); 171 m_resolver->resolve(S::take(m_resolver.get(), ownPtr.release()));
161 } 172 }
162 173
163 virtual void onError() override 174 virtual void onError() override
(...skipping 11 matching lines...) Expand all
175 class CallbackPromiseAdapter<bool, T> final : public WebCallbacks<bool, typename T::WebType> { 186 class CallbackPromiseAdapter<bool, T> final : public WebCallbacks<bool, typename T::WebType> {
176 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter); 187 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter);
177 public: 188 public:
178 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver) 189 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver)
179 : m_resolver(resolver) 190 : m_resolver(resolver)
180 { 191 {
181 ASSERT(m_resolver); 192 ASSERT(m_resolver);
182 } 193 }
183 virtual ~CallbackPromiseAdapter() { } 194 virtual ~CallbackPromiseAdapter() { }
184 195
185 // TODO(nhiroki): onSuccess should take ownership of a bool object for 196 virtual void onSuccess(bool result) override
186 // consistency. (http://crbug.com/493531)
187 virtual void onSuccess(bool* result) override
188 { 197 {
189 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 198 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
190 return; 199 return;
200 m_resolver->resolve(result);
201 }
202
203 virtual void onSuccess(bool* result) override
204 {
205 // TODO(nhiroki): Replace with ASSERT_NOT_REACHED() after chromium-side
206 // changes are landed (http://crbug.com/493531).
207 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
208 return;
191 m_resolver->resolve(*result); 209 m_resolver->resolve(*result);
192 } 210 }
193 211
194 // Takes ownership of |error|. 212 // Takes ownership of |error|.
195 virtual void onError(typename T::WebType* error) override 213 virtual void onError(typename T::WebType* error) override
196 { 214 {
197 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error); 215 OwnPtr<typename T::WebType> ownPtr = adoptPtr(error);
198 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 216 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
199 return; 217 return;
200 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release())); 218 m_resolver->reject(T::take(m_resolver.get(), ownPtr.release()));
(...skipping 25 matching lines...) Expand all
226 { 244 {
227 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped()) 245 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
228 return; 246 return;
229 m_resolver->reject(); 247 m_resolver->reject();
230 } 248 }
231 249
232 private: 250 private:
233 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; 251 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
234 }; 252 };
235 253
236 template<>
237 class CallbackPromiseAdapter<bool, void> final : public WebCallbacks<bool, void> {
238 WTF_MAKE_NONCOPYABLE(CallbackPromiseAdapter);
239 public:
240 explicit CallbackPromiseAdapter(PassRefPtrWillBeRawPtr<ScriptPromiseResolver > resolver)
241 : m_resolver(resolver)
242 {
243 ASSERT(m_resolver);
244 }
245 virtual ~CallbackPromiseAdapter() { }
246
247 // TODO(nhiroki): onSuccess should take ownership of a bool object for
248 // consistency. (http://crbug.com/493531)
249 virtual void onSuccess(bool* result) override
250 {
251 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
252 return;
253 m_resolver->resolve(*result);
254 }
255
256 virtual void onError() override
257 {
258 if (!m_resolver->executionContext() || m_resolver->executionContext()->a ctiveDOMObjectsAreStopped())
259 return;
260 m_resolver->reject();
261 }
262
263 private:
264 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
265 };
266
267 } // namespace blink 254 } // namespace blink
268 255
269 #endif 256 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/modules/push_messaging/PushSubscriptionCallbacks.h » ('j') | public/platform/WebCallbacks.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698