| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_SHARED_IMPL_TRACKED_CALLBACK_H_ | 5 #ifndef PPAPI_SHARED_IMPL_TRACKED_CALLBACK_H_ |
| 6 #define PPAPI_SHARED_IMPL_TRACKED_CALLBACK_H_ | 6 #define PPAPI_SHARED_IMPL_TRACKED_CALLBACK_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| 11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
| 12 #include "base/callback.h" |
| 12 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/synchronization/condition_variable.h" | 15 #include "base/synchronization/condition_variable.h" |
| 15 #include "ppapi/c/pp_completion_callback.h" | 16 #include "ppapi/c/pp_completion_callback.h" |
| 16 #include "ppapi/c/pp_instance.h" | 17 #include "ppapi/c/pp_instance.h" |
| 17 #include "ppapi/c/pp_resource.h" | 18 #include "ppapi/c/pp_resource.h" |
| 18 #include "ppapi/shared_impl/ppapi_shared_export.h" | 19 #include "ppapi/shared_impl/ppapi_shared_export.h" |
| 19 #include "ppapi/shared_impl/ppb_message_loop_shared.h" | 20 #include "ppapi/shared_impl/ppb_message_loop_shared.h" |
| 20 | 21 |
| 21 namespace ppapi { | 22 namespace ppapi { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 // | 78 // |
| 78 // Run() will invoke the call immediately, if invoked from the target thread | 79 // Run() will invoke the call immediately, if invoked from the target thread |
| 79 // (as determined by target_loop_). If invoked on a different thread, the | 80 // (as determined by target_loop_). If invoked on a different thread, the |
| 80 // callback will be scheduled to run later on target_loop_. | 81 // callback will be scheduled to run later on target_loop_. |
| 81 void Run(int32_t result); | 82 void Run(int32_t result); |
| 82 // PostRun is like Run(), except it guarantees that the callback will be run | 83 // PostRun is like Run(), except it guarantees that the callback will be run |
| 83 // later. In particular, if you invoke PostRun on the same thread on which the | 84 // later. In particular, if you invoke PostRun on the same thread on which the |
| 84 // callback is targeted to run, it will *not* be run immediately. | 85 // callback is targeted to run, it will *not* be run immediately. |
| 85 void PostRun(int32_t result); | 86 void PostRun(int32_t result); |
| 86 | 87 |
| 87 void BlockUntilRun(); | 88 // A task to perform cleanup or write output parameters before the callback |
| 89 // returns a result to the plugin. The |result| parameter has the result so |
| 90 // far, e.g. whether the callback has been aborted. If the callback hasn't |
| 91 // been aborted the return value of the task will become the callback result. |
| 92 // The task is always called on the same thread as the callback to the plugin. |
| 93 typedef base::Callback<int32_t(int32_t /* result */)> CompletionTask; |
| 94 |
| 95 // Sets a task that is run just before calling back into the plugin. This |
| 96 // should only be called once. |
| 97 void set_completion_task(const CompletionTask& completion_task); |
| 88 | 98 |
| 89 // Returns the ID of the resource which "owns" the callback, or 0 if the | 99 // Returns the ID of the resource which "owns" the callback, or 0 if the |
| 90 // callback is not associated with any resource. | 100 // callback is not associated with any resource. |
| 91 PP_Resource resource_id() const { return resource_id_; } | 101 PP_Resource resource_id() const { return resource_id_; } |
| 92 | 102 |
| 93 // Returns true if the callback was completed (possibly aborted). | 103 // Returns true if the callback was completed (possibly aborted). |
| 94 bool completed() const { return completed_; } | 104 bool completed() const { return completed_; } |
| 95 | 105 |
| 96 // Returns true if the callback was or should be aborted; this will be the | 106 // Returns true if the callback was or should be aborted; this will be the |
| 97 // case whenever |Abort()| or |PostAbort()| is called before a non-abortive | 107 // case whenever |Abort()| or |PostAbort()| is called before a non-abortive |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 // Flag used by |PostAbort()| and |PostRun()| to check that we don't schedule | 160 // Flag used by |PostAbort()| and |PostRun()| to check that we don't schedule |
| 151 // the callback more than once. | 161 // the callback more than once. |
| 152 bool is_scheduled_; | 162 bool is_scheduled_; |
| 153 | 163 |
| 154 scoped_refptr<CallbackTracker> tracker_; | 164 scoped_refptr<CallbackTracker> tracker_; |
| 155 PP_Resource resource_id_; | 165 PP_Resource resource_id_; |
| 156 bool completed_; | 166 bool completed_; |
| 157 bool aborted_; | 167 bool aborted_; |
| 158 PP_CompletionCallback callback_; | 168 PP_CompletionCallback callback_; |
| 159 | 169 |
| 170 // Task to run just before calling back into the plugin. |
| 171 CompletionTask completion_task_; |
| 172 |
| 160 // The MessageLoopShared on which this callback should be run. This will be | 173 // The MessageLoopShared on which this callback should be run. This will be |
| 161 // NULL if we're in-process. | 174 // NULL if we're in-process. |
| 162 scoped_refptr<MessageLoopShared> target_loop_; | 175 scoped_refptr<MessageLoopShared> target_loop_; |
| 163 | 176 |
| 164 int32_t result_for_blocked_callback_; | 177 int32_t result_for_blocked_callback_; |
| 165 // Used for pausing/waking the blocked thread if this is a blocking completion | 178 // Used for pausing/waking the blocked thread if this is a blocking completion |
| 166 // callback. Note that in-process, there is no lock, blocking callbacks are | 179 // callback. Note that in-process, there is no lock, blocking callbacks are |
| 167 // not allowed, and therefore this pointer will be NULL. | 180 // not allowed, and therefore this pointer will be NULL. |
| 168 scoped_ptr<base::ConditionVariable> operation_completed_condvar_; | 181 scoped_ptr<base::ConditionVariable> operation_completed_condvar_; |
| 169 | 182 |
| 170 DISALLOW_IMPLICIT_CONSTRUCTORS(TrackedCallback); | 183 DISALLOW_IMPLICIT_CONSTRUCTORS(TrackedCallback); |
| 171 }; | 184 }; |
| 172 | 185 |
| 173 } // namespace ppapi | 186 } // namespace ppapi |
| 174 | 187 |
| 175 #endif // PPAPI_SHARED_IMPL_TRACKED_CALLBACK_H_ | 188 #endif // PPAPI_SHARED_IMPL_TRACKED_CALLBACK_H_ |
| OLD | NEW |