Index: chrome_frame/task_marshaller.h |
diff --git a/chrome_frame/task_marshaller.h b/chrome_frame/task_marshaller.h |
index 75d945e0c597c76ba5110a751b41867f9b8ea6fa..20cf9bc13b9bc0cbec3eaeadfe7775e3e78aa27d 100644 |
--- a/chrome_frame/task_marshaller.h |
+++ b/chrome_frame/task_marshaller.h |
@@ -10,6 +10,8 @@ |
#include <deque> |
#include <queue> |
+#include "base/callback.h" |
+#include "base/pending_task.h" |
#include "base/synchronization/lock.h" |
#include "base/threading/non_thread_safe.h" |
#include "base/time.h" |
@@ -26,7 +28,7 @@ namespace tracked_objects { |
class TaskMarshallerThroughMessageQueue : public base::NonThreadSafe { |
public: |
TaskMarshallerThroughMessageQueue(); |
- ~TaskMarshallerThroughMessageQueue(); |
+ virtual ~TaskMarshallerThroughMessageQueue(); |
void SetWindow(HWND wnd, UINT msg) { |
wnd_ = wnd; |
@@ -34,35 +36,32 @@ class TaskMarshallerThroughMessageQueue : public base::NonThreadSafe { |
} |
virtual void PostTask(const tracked_objects::Location& from_here, |
- Task* task); |
+ const base::Closure& task); |
virtual void PostDelayedTask(const tracked_objects::Location& source, |
- Task* task, |
+ const base::Closure& task, |
base::TimeDelta& delay); |
+ |
// Called by the owner of the HWND. |
BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, |
LRESULT& lResult, DWORD dwMsgMapID = 0); |
private: |
- void DeleteAll(); |
- inline Task* PopTask(); |
+ void ClearTasks(); |
+ inline base::Closure PopTask(); |
inline void ExecuteQueuedTasks(); |
void ExecuteDelayedTasks(); |
- void RunTask(Task* task); |
- struct DelayedTask { |
- DelayedTask(Task* task, base::Time at) : run_at(at), task(task), seq(0) {} |
- base::Time run_at; |
- Task* task; |
- int seq; |
- // To support sorting based on time in priority_queue. |
- bool operator<(const DelayedTask& other) const; |
- }; |
+ // Shortest delays ordered at the top of the queue. |
+ base::DelayedTaskQueue delayed_tasks_; |
+ |
+ // A list of tasks that need to be processed by this instance. |
+ std::queue<base::Closure> pending_tasks_; |
- std::priority_queue<DelayedTask> delayed_tasks_; |
- std::queue<Task*> pending_tasks_; |
+ // Lock accesses to |pending_tasks_|. |
base::Lock lock_; |
+ |
+ // ::PostMessage parameters. |
HWND wnd_; |
UINT msg_; |
- int invoke_task_; |
}; |
#endif // CHROME_FRAME_TASK_MARSHALLER_H_ |