// Copyright 2016 The Chromium Embedded Framework 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 CEF_LIBCEF_COMMON_THREAD_IMPL_H_
#define CEF_LIBCEF_COMMON_THREAD_IMPL_H_
#pragma once

#include "include/cef_thread.h"

#include "base/threading/thread.h"

class CefThreadImpl : public CefThread {
 public:
  CefThreadImpl();
  ~CefThreadImpl();

  bool Create(const CefString& display_name,
              cef_thread_priority_t priority,
              cef_message_loop_type_t message_loop_type,
              bool stoppable,
              cef_com_init_mode_t com_init_mode);

  // CefThread methods:
  CefRefPtr<CefTaskRunner> GetTaskRunner() override;
  cef_platform_thread_id_t GetPlatformThreadId() override;
  void Stop() override;
  bool IsRunning() override;

 private:
  std::unique_ptr<base::Thread> thread_;
  cef_platform_thread_id_t thread_id_;
  CefRefPtr<CefTaskRunner> thread_task_runner_;

  // TaskRunner for the owner thread.
  scoped_refptr<base::SequencedTaskRunner> owner_task_runner_;

  IMPLEMENT_REFCOUNTING(CefThreadImpl);
  DISALLOW_COPY_AND_ASSIGN(CefThreadImpl);
};

#endif  // CEF_LIBCEF_COMMON_THREAD_IMPL_H_
