// Copyright 2019 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 "base/task/single_thread_task_executor.h"

#include "base/task/sequence_manager/sequence_manager.h"
#include "base/task/sequence_manager/sequence_manager_impl.h"
#include "build/build_config.h"

namespace base {

SingleThreadTaskExecutor::SingleThreadTaskExecutor(MessagePumpType type)
    : sequence_manager_(sequence_manager::CreateUnboundSequenceManager(
          sequence_manager::SequenceManager::Settings::Builder()
              .SetMessagePumpType(type)
              .Build())),
      default_task_queue_(sequence_manager_->CreateTaskQueue(
          sequence_manager::TaskQueue::Spec("default_tq"))),
      type_(type) {
  sequence_manager_->SetDefaultTaskRunner(default_task_queue_->task_runner());
  sequence_manager_->BindToMessagePump(MessagePump::Create(type));

#if defined(OS_IOS)
  if (type == MessagePumpType::UI) {
    static_cast<sequence_manager::internal::SequenceManagerImpl*>(
        sequence_manager_.get())
        ->AttachToMessagePump();
  }
#endif
}

SingleThreadTaskExecutor::~SingleThreadTaskExecutor() = default;

scoped_refptr<SingleThreadTaskRunner> SingleThreadTaskExecutor::task_runner()
    const {
  return default_task_queue_->task_runner();
}

}  // namespace base
