// Copyright 2016 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 REMOTING_CLIENT_QUEUED_TASK_POSTER_H_
#define REMOTING_CLIENT_QUEUED_TASK_POSTER_H_

#include <memory>

#include "base/callback.h"
#include "base/containers/queue.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"

namespace remoting {

// This is a helper class ensuring tasks posted to |target_task_runner| inside
// the same task slot will be queued up and executed together after current
// task is done on |source_task_runner|. This can prevent unrelated tasks to
// be scheduled on |target_task_runner| in between the task sequence.
// This class can be created on any thread but must be used and deleted on the
// thread of |source_task_runner|.
class QueuedTaskPoster {
 public:
  QueuedTaskPoster(
      scoped_refptr<base::SingleThreadTaskRunner> target_task_runner);
  ~QueuedTaskPoster();

  void AddTask(base::OnceClosure closure);

 private:
  void TransferTaskQueue();

  scoped_refptr<base::SingleThreadTaskRunner> source_task_runner_;
  scoped_refptr<base::SingleThreadTaskRunner> target_task_runner_;

  base::queue<base::OnceClosure> task_queue_;

  bool transfer_task_scheduled_ = false;

  base::WeakPtrFactory<QueuedTaskPoster> weak_factory_{this};

  DISALLOW_COPY_AND_ASSIGN(QueuedTaskPoster);
};

}  // namespace remoting

#endif  // REMOTING_CLIENT_QUEUED_TASK_POSTER_H_
