Index: chrome_frame/task_marshaller.cc |
diff --git a/chrome_frame/task_marshaller.cc b/chrome_frame/task_marshaller.cc |
deleted file mode 100644 |
index c02c245faf60cc77d5b6b626cbb5cf26f5679ab5..0000000000000000000000000000000000000000 |
--- a/chrome_frame/task_marshaller.cc |
+++ /dev/null |
@@ -1,136 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome_frame/task_marshaller.h" |
- |
-#include "base/callback.h" |
-#include "base/logging.h" |
- |
-TaskMarshallerThroughMessageQueue::TaskMarshallerThroughMessageQueue() |
- : wnd_(NULL), |
- msg_(0xFFFF) { |
-} |
- |
-TaskMarshallerThroughMessageQueue::~TaskMarshallerThroughMessageQueue() { |
- ClearTasks(); |
-} |
- |
-void TaskMarshallerThroughMessageQueue::PostTask( |
- const tracked_objects::Location& from_here, const base::Closure& task) { |
- DCHECK(wnd_ != NULL); |
- |
- lock_.Acquire(); |
- bool has_work = !pending_tasks_.empty(); |
- pending_tasks_.push(task); |
- lock_.Release(); |
- |
- // Don't post message if there is already one. |
- if (has_work) |
- return; |
- |
- if (!::PostMessage(wnd_, msg_, 0, 0)) { |
- DVLOG(1) << "Dropping MSG_EXECUTE_TASK message for destroyed window."; |
- ClearTasks(); |
- } |
-} |
- |
-void TaskMarshallerThroughMessageQueue::PostDelayedTask( |
- const tracked_objects::Location& source, |
- const base::Closure& task, |
- base::TimeDelta& delay) { |
- DCHECK(wnd_); |
- |
- base::AutoLock lock(lock_); |
- base::PendingTask delayed_task(source, task, base::TimeTicks::Now() + delay, |
- true); |
- base::TimeTicks top_run_time = delayed_tasks_.top().delayed_run_time; |
- delayed_tasks_.push(delayed_task); |
- |
- // Reschedule the timer if |delayed_task| will be the next delayed task to |
- // run. |
- if (delayed_task.delayed_run_time < top_run_time) { |
- ::SetTimer(wnd_, reinterpret_cast<UINT_PTR>(this), |
- static_cast<DWORD>(delay.InMilliseconds()), NULL); |
- } |
-} |
- |
-BOOL TaskMarshallerThroughMessageQueue::ProcessWindowMessage(HWND hWnd, |
- UINT uMsg, |
- WPARAM wParam, |
- LPARAM lParam, |
- LRESULT& lResult, |
- DWORD dwMsgMapID) { |
- if (hWnd == wnd_ && uMsg == msg_) { |
- ExecuteQueuedTasks(); |
- lResult = 0; |
- return TRUE; |
- } |
- |
- if (hWnd == wnd_ && uMsg == WM_TIMER) { |
- ExecuteDelayedTasks(); |
- lResult = 0; |
- return TRUE; |
- } |
- |
- return FALSE; |
-} |
- |
-base::Closure TaskMarshallerThroughMessageQueue::PopTask() { |
- base::AutoLock lock(lock_); |
- if (pending_tasks_.empty()) |
- return base::Closure(); |
- |
- base::Closure task = pending_tasks_.front(); |
- pending_tasks_.pop(); |
- return task; |
-} |
- |
-void TaskMarshallerThroughMessageQueue::ExecuteQueuedTasks() { |
- DCHECK(CalledOnValidThread()); |
- base::Closure task; |
- while (!(task = PopTask()).is_null()) |
- task.Run(); |
-} |
- |
-void TaskMarshallerThroughMessageQueue::ExecuteDelayedTasks() { |
- DCHECK(CalledOnValidThread()); |
- ::KillTimer(wnd_, reinterpret_cast<UINT_PTR>(this)); |
- while (true) { |
- lock_.Acquire(); |
- |
- if (delayed_tasks_.empty()) { |
- lock_.Release(); |
- return; |
- } |
- |
- base::PendingTask next_task = delayed_tasks_.top(); |
- base::TimeTicks now = base::TimeTicks::Now(); |
- base::TimeTicks next_run = next_task.delayed_run_time; |
- if (next_run > now) { |
- int64 delay = (next_run - now).InMillisecondsRoundedUp(); |
- ::SetTimer(wnd_, reinterpret_cast<UINT_PTR>(this), |
- static_cast<DWORD>(delay), NULL); |
- lock_.Release(); |
- return; |
- } |
- |
- delayed_tasks_.pop(); |
- lock_.Release(); |
- |
- // Run the task outside the lock. |
- next_task.task.Run(); |
- } |
-} |
- |
-void TaskMarshallerThroughMessageQueue::ClearTasks() { |
- base::AutoLock lock(lock_); |
- DVLOG_IF(1, !pending_tasks_.empty()) << "Destroying " |
- << pending_tasks_.size() |
- << " pending tasks."; |
- while (!pending_tasks_.empty()) |
- pending_tasks_.pop(); |
- |
- while (!delayed_tasks_.empty()) |
- delayed_tasks_.pop(); |
-} |