// 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.

#ifndef CHROME_FRAME_TASK_MARSHALLER_H_
#define CHROME_FRAME_TASK_MARSHALLER_H_

#include <windows.h>
#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/time.h"

class Task;

namespace tracked_objects {
class Location;
}

// TaskMarshallerThroughMessageQueue is similar to base::MessageLoopForUI
// in cases where we do not control the thread lifetime and message retrieval
// and dispatching. It uses a HWND to ::PostMessage to it as a signal that
// the task queue is not empty.
class TaskMarshallerThroughMessageQueue : public base::NonThreadSafe {
 public:
  TaskMarshallerThroughMessageQueue();
  virtual ~TaskMarshallerThroughMessageQueue();

  void SetWindow(HWND wnd, UINT msg) {
    wnd_ = wnd;
    msg_ = msg;
  }

  virtual void PostTask(const tracked_objects::Location& from_here,
                        const base::Closure& task);
  virtual void PostDelayedTask(const tracked_objects::Location& source,
                               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 ClearTasks();
  inline base::Closure PopTask();
  inline void ExecuteQueuedTasks();
  void ExecuteDelayedTasks();

  // 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_;

  // Lock accesses to |pending_tasks_|.
  base::Lock lock_;

  // ::PostMessage parameters.
  HWND wnd_;
  UINT msg_;
};

#endif  // CHROME_FRAME_TASK_MARSHALLER_H_
