# Copyright 2014 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.

import("//third_party/protobuf/proto_library.gni")

source_set("pairing") {
  sources = [
    "bluetooth_controller_pairing_controller.cc",
    "bluetooth_controller_pairing_controller.h",
    "bluetooth_host_pairing_controller.cc",
    "bluetooth_host_pairing_controller.h",
    "bluetooth_pairing_constants.cc",
    "bluetooth_pairing_constants.h",
    "controller_pairing_controller.cc",
    "controller_pairing_controller.h",
    "fake_controller_pairing_controller.cc",
    "fake_controller_pairing_controller.h",
    "fake_host_pairing_controller.cc",
    "fake_host_pairing_controller.h",
    "host_pairing_controller.cc",
    "host_pairing_controller.h",
    "message_buffer.cc",
    "message_buffer.h",
    "proto_decoder.cc",
    "proto_decoder.h",
    "shark_connection_listener.cc",
    "shark_connection_listener.h",
  ]

  deps = [
    ":proto",
    "//base",
    "//chromeos",
    "//device/bluetooth",
    "//net",
    "//services/device/public/mojom",
    "//services/device/public/mojom:constants",
    "//services/service_manager/public/cpp",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "message_buffer_unittest.cc",
  ]

  deps = [
    ":pairing",
    "//net",
    "//testing/gtest",
  ]
}

proto_library("proto") {
  sources = [
    "pairing_api.proto",
  ]
}
