// Copyright 2017 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 "ash/mojo_test_interface_factory.h"

#include <utility>

#include "ash/metrics/time_to_first_present_recorder_test_api.h"
#include "ash/public/interfaces/shelf_test_api.mojom.h"
#include "ash/public/interfaces/shell_test_api.mojom.h"
#include "ash/public/interfaces/system_tray_test_api.mojom.h"
#include "ash/public/interfaces/time_to_first_present_recorder_test_api.mojom.h"
#include "ash/shelf/shelf_test_api.h"
#include "ash/shell_test_api.h"
#include "ash/system/tray/system_tray_test_api.h"
#include "base/bind.h"
#include "base/single_thread_task_runner.h"

namespace ash {
namespace mojo_test_interface_factory {
namespace {

// These functions aren't strictly necessary, but exist to make threading and
// arguments clearer.

void BindShelfTestApiOnMainThread(mojom::ShelfTestApiRequest request) {
  ShelfTestApi::BindRequest(std::move(request));
}

void BindShellTestApiOnMainThread(mojom::ShellTestApiRequest request) {
  ShellTestApi::BindRequest(std::move(request));
}

void BindSystemTrayTestApiOnMainThread(
    mojom::SystemTrayTestApiRequest request) {
  SystemTrayTestApi::BindRequest(std::move(request));
}

void BindTimeToFirstPresentRecorderTestApiOnMainThread(
    mojom::TimeToFirstPresentRecorderTestApiRequest request) {
  TimeToFirstPresentRecorderTestApi::BindRequest(std::move(request));
}

}  // namespace

void RegisterInterfaces(
    service_manager::BinderRegistry* registry,
    scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) {
  registry->AddInterface(base::Bind(&BindShelfTestApiOnMainThread),
                         main_thread_task_runner);
  registry->AddInterface(base::Bind(&BindShellTestApiOnMainThread),
                         main_thread_task_runner);
  registry->AddInterface(base::Bind(&BindSystemTrayTestApiOnMainThread),
                         main_thread_task_runner);
  registry->AddInterface(
      base::Bind(&BindTimeToFirstPresentRecorderTestApiOnMainThread),
      main_thread_task_runner);
}

}  // namespace mojo_test_interface_factory
}  // namespace ash
