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

source_set("channel") {
  sources = [
    "channel/cast_auth_util.cc",
    "channel/cast_auth_util.h",
    "channel/message_util.cc",
    "channel/message_util.h",
    "channel/sender_socket_factory.cc",
    "public/sender_socket_factory.h",
  ]

  deps = [
    "../common:channel",
    "../common/certificate/proto:certificate_proto",
    "../common/channel/proto:channel_proto",
  ]

  public_deps = [
    "../../platform",
    "../../third_party/boringssl",
    "../../util",
    "../common:certificate",
    "../common:channel",
  ]
}

source_set("sender") {
  sources = [
    "cast_app_availability_tracker.cc",
    "cast_app_availability_tracker.h",
    "cast_app_discovery_service_impl.cc",
    "cast_app_discovery_service_impl.h",
    "cast_platform_client.cc",
    "cast_platform_client.h",
    "public/cast_app_discovery_service.cc",
    "public/cast_app_discovery_service.h",
    "public/cast_media_source.cc",
    "public/cast_media_source.h",
  ]

  public_deps = [
    ":channel",
    "../../platform",
    "../../third_party/abseil",
    "../../util",
    "../common:channel",
    "../common:public",
  ]
}

source_set("test_helpers") {
  testonly = true
  sources = [
    "testing/test_helpers.cc",
    "testing/test_helpers.h",
  ]

  deps = [
    "../../third_party/googletest:gtest",
    "../../util",
    "../common:channel",
    "../receiver:channel",
  ]

  public_deps = [
    ":channel",
  ]
}

source_set("unittests") {
  testonly = true
  sources = [
    "cast_app_availability_tracker_unittest.cc",
    "cast_app_discovery_service_impl_unittest.cc",
    "cast_platform_client_unittest.cc",
    "channel/cast_auth_util_unittest.cc",
  ]

  deps = [
    ":channel",
    ":sender",
    ":test_helpers",
    "../../platform",
    "../../platform:test",
    "../../testing/util",
    "../../third_party/googletest:gmock",
    "../../third_party/googletest:gtest",
    "../../util",
    "../common:test_helpers",
    "../common/certificate/proto:certificate_proto",
    "../common/certificate/proto:certificate_unittest_proto",
  ]
}
