OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #ifndef PPAPI_PROXY_ENTER_PROXY_H_ | 5 #ifndef PPAPI_PROXY_ENTER_PROXY_H_ |
6 #define PPAPI_PROXY_ENTER_PROXY_H_ | 6 #define PPAPI_PROXY_ENTER_PROXY_H_ |
7 | 7 |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "ppapi/cpp/completion_callback.h" | 9 #include "ppapi/cpp/completion_callback.h" |
10 #include "ppapi/proxy/host_dispatcher.h" | 10 #include "ppapi/proxy/host_dispatcher.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 void RunCallback(int32_t result) { | 159 void RunCallback(int32_t result) { |
160 DCHECK(needs_running_); | 160 DCHECK(needs_running_); |
161 needs_running_ = false; | 161 needs_running_ = false; |
162 callback_.Run(result); | 162 callback_.Run(result); |
163 } | 163 } |
164 | 164 |
165 bool needs_running_; | 165 bool needs_running_; |
166 pp::CompletionCallback callback_; | 166 pp::CompletionCallback callback_; |
167 }; | 167 }; |
168 | 168 |
169 // Like EnterHostFromHostResourceForceCallback but for Function APIs. It takes | |
170 // an instance instead of a resource ID. | |
171 template<typename FunctionT> | |
172 class EnterHostFunctionForceCallback | |
173 : public thunk::EnterFunctionNoLock<FunctionT> { | |
174 public: | |
175 // For callbacks that take no parameters except the "int32_t result". Most | |
176 // implementations will use the 1-extra-argument constructor below. | |
177 template<class CallbackFactory, typename Method> | |
178 EnterHostFunctionForceCallback(PP_Instance instance, | |
179 CallbackFactory& factory, | |
180 Method method) | |
181 : thunk::EnterFunctionNoLock<FunctionT>(instance, false), | |
182 needs_running_(true), | |
183 callback_(factory.NewOptionalCallback(method)) { | |
184 if (this->failed()) | |
185 RunCallback(PP_ERROR_BADARGUMENT); | |
186 } | |
187 | |
188 // For callbacks that take an extra parameter as a closure. | |
189 template<class CallbackFactory, typename Method, typename A> | |
190 EnterHostFunctionForceCallback(PP_Instance instance, | |
191 CallbackFactory& factory, | |
192 Method method, | |
193 const A& a) | |
194 : thunk::EnterFunctionNoLock<FunctionT>(instance, false), | |
195 needs_running_(true), | |
196 callback_(factory.NewOptionalCallback(method, a)) { | |
197 if (this->failed()) | |
198 RunCallback(PP_ERROR_BADARGUMENT); | |
199 } | |
200 | |
201 // For callbacks that take two extra parameters as a closure. | |
202 template<class CallbackFactory, typename Method, typename A, typename B> | |
203 EnterHostFunctionForceCallback(PP_Instance instance, | |
204 CallbackFactory& factory, | |
205 Method method, | |
206 const A& a, | |
207 const B& b) | |
208 : thunk::EnterFunctionNoLock<FunctionT>(instance), | |
209 needs_running_(true), | |
210 callback_(factory.NewOptionalCallback(method, a, b)) { | |
211 if (this->failed()) | |
212 RunCallback(PP_ERROR_BADARGUMENT); | |
213 } | |
214 | |
215 ~EnterHostFunctionForceCallback() { | |
216 if (needs_running_) { | |
217 NOTREACHED() << "Should always call SetResult except in the " | |
218 "initialization failed case."; | |
219 RunCallback(PP_ERROR_FAILED); | |
220 } | |
221 } | |
222 | |
223 void SetResult(int32_t result) { | |
224 DCHECK(needs_running_) << "Don't call SetResult when there already is one."; | |
225 needs_running_ = false; | |
226 if (result != PP_OK_COMPLETIONPENDING) | |
227 callback_.Run(result); | |
228 } | |
229 | |
230 PP_CompletionCallback callback() { | |
231 return callback_.pp_completion_callback(); | |
232 } | |
233 | |
234 private: | |
235 void RunCallback(int32_t result) { | |
236 DCHECK(needs_running_); | |
237 needs_running_ = false; | |
238 callback_.Run(result); | |
239 } | |
240 | |
241 bool needs_running_; | |
242 pp::CompletionCallback callback_; | |
243 }; | |
244 | |
245 } // namespace proxy | 169 } // namespace proxy |
246 } // namespace ppapi | 170 } // namespace ppapi |
247 | 171 |
248 #endif // PPAPI_PROXY_ENTER_PROXY_H_ | 172 #endif // PPAPI_PROXY_ENTER_PROXY_H_ |
OLD | NEW |