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

static_library("signaling") {
  sources = [
    "delegating_signal_strategy.cc",
    "delegating_signal_strategy.h",
    "ftl_client_uuid_device_id_provider.cc",
    "ftl_client_uuid_device_id_provider.h",
    "ftl_device_id_provider.h",
    "ftl_grpc_context.cc",
    "ftl_grpc_context.h",
    "ftl_host_device_id_provider.cc",
    "ftl_host_device_id_provider.h",
    "ftl_message_reception_channel.cc",
    "ftl_message_reception_channel.h",
    "ftl_messaging_client.cc",
    "ftl_messaging_client.h",
    "ftl_registration_manager.cc",
    "ftl_registration_manager.h",
    "ftl_signal_strategy.cc",
    "ftl_signal_strategy.h",
    "iq_sender.cc",
    "iq_sender.h",
    "message_reception_channel.h",
    "message_tracker.cc",
    "message_tracker.h",
    "messaging_client.h",
    "registration_manager.h",
    "remoting_log_to_server.cc",
    "remoting_log_to_server.h",
    "server_log_entry.cc",
    "server_log_entry.h",
    "signal_strategy.cc",
    "signal_strategy.h",
    "signaling_address.cc",
    "signaling_address.h",
    "signaling_id_util.cc",
    "signaling_id_util.h",
    "xmpp_log_to_server.cc",
    "xmpp_log_to_server.h",
  ]

  configs += [
    "//build/config/compiler:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
    "//remoting/build/config:version",
  ]

  public_deps = [
    "//remoting/proto",
    "//remoting/proto/ftl/v1:ftl_grpc_library",
    "//remoting/proto/remoting/v1:telemetry_grpc_library",
    "//third_party/libjingle_xmpp",
    "//third_party/webrtc_overrides:webrtc_component",
  ]

  deps = [
    "//base",
    "//crypto",
    "//google_apis",
    "//jingle:webrtc_glue",
    "//net",
    "//remoting/base",
    "//remoting/base/grpc_support",
    "//remoting/proto/remoting/v1:telemetry_messages",
    "//third_party/grpc:grpcpp",
  ]

  if (is_nacl) {
    sources -= [
      "ftl_client_uuid_device_id_provider.cc",
      "ftl_client_uuid_device_id_provider.h",
      "ftl_grpc_context.cc",
      "ftl_grpc_context.h",
      "ftl_host_device_id_provider.cc",
      "ftl_host_device_id_provider.h",
      "ftl_message_reception_channel.cc",
      "ftl_message_reception_channel.h",
      "ftl_messaging_client.cc",
      "ftl_messaging_client.h",
      "ftl_registration_manager.cc",
      "ftl_registration_manager.h",
      "ftl_signal_strategy.cc",
      "ftl_signal_strategy.h",
      "remoting_log_to_server.cc",
      "remoting_log_to_server.h",
      "server_log_entry.cc",
      "xmpp_log_to_server.cc",
    ]
    deps -= [
      "//google_apis",
      "//remoting/base/grpc_support",
      "//third_party/grpc:grpcpp",
    ]
    public_deps -= [
      "//remoting/proto/ftl/v1:ftl_grpc_library",
      "//remoting/proto/remoting/v1:telemetry_grpc_library",
    ]
  }
}

static_library("test_support") {
  testonly = true

  sources = [
    "fake_signal_strategy.cc",
    "fake_signal_strategy.h",
    "mock_signal_strategy.cc",
    "mock_signal_strategy.h",
  ]

  public_deps = [
    ":signaling",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "ftl_message_reception_channel_unittest.cc",
    "ftl_messaging_client_unittest.cc",
    "ftl_registration_manager_unittest.cc",
    "ftl_signal_strategy_unittest.cc",
    "iq_sender_unittest.cc",
    "message_tracker_unittest.cc",
    "remoting_log_to_server_unittest.cc",
    "server_log_entry_unittest.cc",
    "server_log_entry_unittest.h",
    "signaling_address_unittest.cc",
    "signaling_id_util_unittest.cc",
    "xmpp_log_to_server_unittest.cc",
  ]

  deps = [
    ":test_support",
    "//net:test_support",
    "//remoting/base/grpc_support:unit_tests",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
