| 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 WEBKIT_GLUE_PLUGINS_PEPPER_CALLBACKS_H_ | 5 #ifndef WEBKIT_GLUE_PLUGINS_PEPPER_CALLBACKS_H_ |
| 6 #define WEBKIT_GLUE_PLUGINS_PEPPER_CALLBACKS_H_ | 6 #define WEBKIT_GLUE_PLUGINS_PEPPER_CALLBACKS_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/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/task.h" | 13 #include "base/task.h" |
| 14 #include "ppapi/c/pp_completion_callback.h" | 14 #include "ppapi/c/pp_completion_callback.h" |
| 15 #include "ppapi/c/pp_resource.h" | 15 #include "ppapi/c/pp_resource.h" |
| 16 #include "webkit/plugins/webkit_plugins_export.h" |
| 16 | 17 |
| 17 namespace webkit { | 18 namespace webkit { |
| 18 namespace ppapi { | 19 namespace ppapi { |
| 19 | 20 |
| 20 class TrackedCallback; | 21 class TrackedCallback; |
| 21 | 22 |
| 22 // Pepper callbacks have the following semantics (unless otherwise specified; | 23 // Pepper callbacks have the following semantics (unless otherwise specified; |
| 23 // in particular, the below apply to all completion callbacks): | 24 // in particular, the below apply to all completion callbacks): |
| 24 // - Callbacks are always run on the main thread. | 25 // - Callbacks are always run on the main thread. |
| 25 // - Callbacks are always called from the main message loop. In particular, | 26 // - Callbacks are always called from the main message loop. In particular, |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 | 70 |
| 70 // Abort all callbacks (synchronously). | 71 // Abort all callbacks (synchronously). |
| 71 void AbortAll(); | 72 void AbortAll(); |
| 72 | 73 |
| 73 // Abort all callbacks associated to the given resource ID (which must be | 74 // Abort all callbacks associated to the given resource ID (which must be |
| 74 // valid, i.e., nonzero) by posting a task (or tasks). | 75 // valid, i.e., nonzero) by posting a task (or tasks). |
| 75 void PostAbortForResource(PP_Resource resource_id); | 76 void PostAbortForResource(PP_Resource resource_id); |
| 76 | 77 |
| 77 private: | 78 private: |
| 78 friend class base::RefCountedThreadSafe<CallbackTracker>; | 79 friend class base::RefCountedThreadSafe<CallbackTracker>; |
| 79 ~CallbackTracker(); | 80 WEBKIT_PLUGINS_EXPORT ~CallbackTracker(); |
| 80 | 81 |
| 81 // |TrackedCallback| are expected to automatically add and | 82 // |TrackedCallback| are expected to automatically add and |
| 82 // remove themselves from their provided |CallbackTracker|. | 83 // remove themselves from their provided |CallbackTracker|. |
| 83 friend class TrackedCallback; | 84 friend class TrackedCallback; |
| 84 void Add(const scoped_refptr<TrackedCallback>& tracked_callback); | 85 void Add(const scoped_refptr<TrackedCallback>& tracked_callback); |
| 85 void Remove(const scoped_refptr<TrackedCallback>& tracked_callback); | 86 void Remove(const scoped_refptr<TrackedCallback>& tracked_callback); |
| 86 | 87 |
| 87 // For each resource ID with a pending callback, store a set with its pending | 88 // For each resource ID with a pending callback, store a set with its pending |
| 88 // callbacks. (Resource ID 0 is used for callbacks not associated to a valid | 89 // callbacks. (Resource ID 0 is used for callbacks not associated to a valid |
| 89 // resource.) If a resource ID is re-used for another resource, there may be | 90 // resource.) If a resource ID is re-used for another resource, there may be |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 // callback; see the comment for |MarkAsCompleted()| for a caveat. | 126 // callback; see the comment for |MarkAsCompleted()| for a caveat. |
| 126 class TrackedCallback : public base::RefCountedThreadSafe<TrackedCallback> { | 127 class TrackedCallback : public base::RefCountedThreadSafe<TrackedCallback> { |
| 127 public: | 128 public: |
| 128 // The constructor will add the new object to the tracker. The resource ID is | 129 // The constructor will add the new object to the tracker. The resource ID is |
| 129 // optional -- set it to 0 if no resource is associated to the callback. | 130 // optional -- set it to 0 if no resource is associated to the callback. |
| 130 TrackedCallback(const scoped_refptr<CallbackTracker>& tracker, | 131 TrackedCallback(const scoped_refptr<CallbackTracker>& tracker, |
| 131 PP_Resource resource_id); | 132 PP_Resource resource_id); |
| 132 | 133 |
| 133 // These run the callback in an abortive manner, or post a task to do so (but | 134 // These run the callback in an abortive manner, or post a task to do so (but |
| 134 // immediately marking the callback as to be aborted). | 135 // immediately marking the callback as to be aborted). |
| 135 void Abort(); | 136 WEBKIT_PLUGINS_EXPORT void Abort(); |
| 136 void PostAbort(); | 137 void PostAbort(); |
| 137 | 138 |
| 138 // Returns the ID of the resource which "owns" the callback, or 0 if the | 139 // Returns the ID of the resource which "owns" the callback, or 0 if the |
| 139 // callback is not associated with any resource. | 140 // callback is not associated with any resource. |
| 140 PP_Resource resource_id() const { return resource_id_; } | 141 PP_Resource resource_id() const { return resource_id_; } |
| 141 | 142 |
| 142 // Returns true if the callback was completed (possibly aborted). | 143 // Returns true if the callback was completed (possibly aborted). |
| 143 bool completed() const { return completed_; } | 144 bool completed() const { return completed_; } |
| 144 | 145 |
| 145 // Returns true if the callback was or should be aborted; this will be the | 146 // Returns true if the callback was or should be aborted; this will be the |
| (...skipping 26 matching lines...) Expand all Loading... |
| 172 bool aborted_; | 173 bool aborted_; |
| 173 | 174 |
| 174 DISALLOW_COPY_AND_ASSIGN(TrackedCallback); | 175 DISALLOW_COPY_AND_ASSIGN(TrackedCallback); |
| 175 }; | 176 }; |
| 176 | 177 |
| 177 // |TrackedCompletionCallback| represents a tracked Pepper completion callback. | 178 // |TrackedCompletionCallback| represents a tracked Pepper completion callback. |
| 178 class TrackedCompletionCallback : public TrackedCallback { | 179 class TrackedCompletionCallback : public TrackedCallback { |
| 179 public: | 180 public: |
| 180 // Create a tracked completion callback and register it with the tracker. The | 181 // Create a tracked completion callback and register it with the tracker. The |
| 181 // resource ID may be 0 if the callback is not associated to any resource. | 182 // resource ID may be 0 if the callback is not associated to any resource. |
| 182 TrackedCompletionCallback(const scoped_refptr<CallbackTracker>& tracker, | 183 WEBKIT_PLUGINS_EXPORT TrackedCompletionCallback( |
| 183 PP_Resource resource_id, | 184 const scoped_refptr<CallbackTracker>& tracker, |
| 184 const PP_CompletionCallback& callback); | 185 PP_Resource resource_id, |
| 186 const PP_CompletionCallback& callback); |
| 185 | 187 |
| 186 // Run the callback with the given result. If the callback had previously been | 188 // Run the callback with the given result. If the callback had previously been |
| 187 // marked as to be aborted (by |PostAbort()|), |result| will be ignored and | 189 // marked as to be aborted (by |PostAbort()|), |result| will be ignored and |
| 188 // the callback will be run with result |PP_ERROR_ABORTED|. | 190 // the callback will be run with result |PP_ERROR_ABORTED|. |
| 189 void Run(int32_t result); | 191 WEBKIT_PLUGINS_EXPORT void Run(int32_t result); |
| 190 | 192 |
| 191 protected: | 193 protected: |
| 192 // |TrackedCallback| method: | 194 // |TrackedCallback| method: |
| 193 virtual void AbortImpl(); | 195 virtual void AbortImpl(); |
| 194 | 196 |
| 195 private: | 197 private: |
| 196 PP_CompletionCallback callback_; | 198 PP_CompletionCallback callback_; |
| 197 | 199 |
| 198 DISALLOW_COPY_AND_ASSIGN(TrackedCompletionCallback); | 200 DISALLOW_COPY_AND_ASSIGN(TrackedCompletionCallback); |
| 199 }; | 201 }; |
| 200 | 202 |
| 201 } // namespace ppapi | 203 } // namespace ppapi |
| 202 } // namespace webkit | 204 } // namespace webkit |
| 203 | 205 |
| 204 #endif // WEBKIT_PLUGINS_PPAPI_CALLBACKS_H_ | 206 #endif // WEBKIT_PLUGINS_PPAPI_CALLBACKS_H_ |
| OLD | NEW |