# 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("//build/config/features.gni")
import("//media/media_options.gni")
import("//remoting/remoting_options.gni")

static_library("protocol") {
  sources = [
    "audio_decode_scheduler.cc",
    "audio_decode_scheduler.h",
    "audio_reader.cc",
    "audio_reader.h",
    "audio_stub.h",
    "auth_util.cc",
    "auth_util.h",
    "authenticator.cc",
    "authenticator.h",
    "bandwidth_estimator.h",
    "capability_names.h",
    "channel_authenticator.h",
    "channel_dispatcher_base.cc",
    "channel_dispatcher_base.h",
    "channel_multiplexer.cc",
    "channel_multiplexer.h",
    "channel_socket_adapter.cc",
    "channel_socket_adapter.h",
    "client_authentication_config.cc",
    "client_authentication_config.h",
    "client_control_dispatcher.cc",
    "client_control_dispatcher.h",
    "client_event_dispatcher.cc",
    "client_event_dispatcher.h",
    "client_stub.h",
    "client_video_dispatcher.cc",
    "client_video_dispatcher.h",
    "client_video_stats_dispatcher.cc",
    "client_video_stats_dispatcher.h",
    "clipboard_echo_filter.cc",
    "clipboard_echo_filter.h",
    "clipboard_filter.cc",
    "clipboard_filter.h",
    "clipboard_stub.h",
    "clipboard_thread_proxy.cc",
    "clipboard_thread_proxy.h",
    "connection_to_client.h",
    "connection_to_host.cc",
    "connection_to_host.h",
    "content_description.cc",
    "content_description.h",
    "data_channel_manager.cc",
    "data_channel_manager.h",
    "datagram_channel_factory.h",
    "errors.cc",
    "errors.h",
    "file_transfer_helpers.cc",
    "file_transfer_helpers.h",
    "frame_consumer.h",
    "frame_stats.cc",
    "frame_stats.h",
    "host_control_dispatcher.cc",
    "host_control_dispatcher.h",
    "host_event_dispatcher.cc",
    "host_event_dispatcher.h",
    "host_stub.h",
    "host_video_dispatcher.cc",
    "host_video_dispatcher.h",
    "host_video_stats_dispatcher.cc",
    "host_video_stats_dispatcher.h",
    "ice_config.cc",
    "ice_config.h",
    "ice_config_request.h",
    "ice_connection_to_host.cc",
    "ice_connection_to_host.h",
    "ice_transport.cc",
    "ice_transport.h",
    "ice_transport_channel.cc",
    "ice_transport_channel.h",
    "input_event_timestamps.cc",
    "input_event_timestamps.h",
    "input_event_tracker.cc",
    "input_event_tracker.h",
    "input_filter.cc",
    "input_filter.h",
    "input_stub.h",
    "it2me_host_authenticator_factory.cc",
    "it2me_host_authenticator_factory.h",
    "jingle_messages.cc",
    "jingle_messages.h",
    "jingle_session.cc",
    "jingle_session.h",
    "jingle_session_manager.cc",
    "jingle_session_manager.h",
    "me2me_host_authenticator_factory.cc",
    "me2me_host_authenticator_factory.h",
    "message_decoder.cc",
    "message_decoder.h",
    "message_pipe.h",
    "message_reader.cc",
    "message_reader.h",
    "message_serialization.cc",
    "message_serialization.h",
    "monitored_video_stub.cc",
    "monitored_video_stub.h",
    "mouse_input_filter.cc",
    "mouse_input_filter.h",
    "named_message_pipe_handler.cc",
    "named_message_pipe_handler.h",
    "negotiating_authenticator_base.cc",
    "negotiating_authenticator_base.h",
    "negotiating_client_authenticator.cc",
    "negotiating_client_authenticator.h",
    "negotiating_host_authenticator.cc",
    "negotiating_host_authenticator.h",
    "network_settings.h",
    "p2p_datagram_socket.h",
    "p2p_stream_socket.h",
    "pairing_authenticator_base.cc",
    "pairing_authenticator_base.h",
    "pairing_client_authenticator.cc",
    "pairing_client_authenticator.h",
    "pairing_host_authenticator.cc",
    "pairing_host_authenticator.h",
    "pairing_registry.cc",
    "pairing_registry.h",
    "performance_tracker.cc",
    "performance_tracker.h",
    "port_allocator.cc",
    "port_allocator.h",
    "port_allocator_factory.h",
    "port_range.cc",
    "port_range.h",
    "process_stats_stub.h",
    "pseudotcp_adapter.cc",
    "pseudotcp_adapter.h",
    "pseudotcp_channel_factory.cc",
    "pseudotcp_channel_factory.h",
    "rejecting_authenticator.cc",
    "rejecting_authenticator.h",
    "sdp_message.cc",
    "sdp_message.h",
    "secure_channel_factory.cc",
    "secure_channel_factory.h",
    "session.h",
    "session_config.cc",
    "session_config.h",
    "session_manager.h",
    "session_plugin.h",
    "socket_util.cc",
    "socket_util.h",
    "spake2_authenticator.cc",
    "spake2_authenticator.h",
    "ssl_hmac_channel_authenticator.cc",
    "ssl_hmac_channel_authenticator.h",
    "stream_channel_factory.h",
    "stream_message_pipe_adapter.cc",
    "stream_message_pipe_adapter.h",
    "third_party_authenticator_base.cc",
    "third_party_authenticator_base.h",
    "third_party_client_authenticator.cc",
    "third_party_client_authenticator.h",
    "third_party_host_authenticator.cc",
    "third_party_host_authenticator.h",
    "token_validator.h",
    "transport.cc",
    "transport.h",
    "transport_context.cc",
    "transport_context.h",
    "v2_authenticator.cc",
    "v2_authenticator.h",
    "validating_authenticator.cc",
    "validating_authenticator.h",
    "video_channel_state_observer.h",
    "video_renderer.h",
    "video_stats_stub.h",
    "video_stub.h",
    "webrtc_bandwidth_estimator.cc",
    "webrtc_bandwidth_estimator.h",
  ]

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

  public_deps = [
    "//remoting/proto",
    "//third_party/webrtc_overrides",
  ]
  deps = [
    "//base",
    "//crypto",
    "//jingle:jingle_glue",
    "//net",
    "//remoting/base",
    "//remoting/codec:decoder",
    "//remoting/proto/remoting/v1:network_traversal_proto",
    "//remoting/signaling",
    "//third_party/boringssl",
    "//third_party/libyuv",
    "//ui/events:dom_keycode_converter",
  ]

  defines = []

  if (!is_nacl) {
    # This condition needs to match with //remoting/codec/BUILD.gn
    if (is_win || is_linux) {
      defines += [ "USE_H264_ENCODER" ]
      deps += [
        "//media",
        "//skia",
      ]
    }

    sources += [
      "chromium_port_allocator_factory.cc",
      "chromium_port_allocator_factory.h",
      "chromium_socket_factory.cc",
      "chromium_socket_factory.h",
      "remoting_ice_config_request.cc",
      "remoting_ice_config_request.h",
      "webrtc_audio_module.cc",
      "webrtc_audio_module.h",
      "webrtc_audio_sink_adapter.cc",
      "webrtc_audio_sink_adapter.h",
      "webrtc_connection_to_host.cc",
      "webrtc_connection_to_host.h",
      "webrtc_data_stream_adapter.cc",
      "webrtc_data_stream_adapter.h",
      "webrtc_dummy_video_encoder.cc",
      "webrtc_dummy_video_encoder.h",
      "webrtc_transport.cc",
      "webrtc_transport.h",
      "webrtc_video_renderer_adapter.cc",
      "webrtc_video_renderer_adapter.h",
    ]

    if (enable_remoting_host) {
      sources += [
        "webrtc_audio_source_adapter.cc",
        "webrtc_audio_source_adapter.h",
        "webrtc_audio_stream.cc",
        "webrtc_audio_stream.h",
        "webrtc_connection_to_client.cc",
        "webrtc_connection_to_client.h",
        "webrtc_frame_scheduler.h",
        "webrtc_frame_scheduler_simple.cc",
        "webrtc_frame_scheduler_simple.h",
        "webrtc_video_stream.cc",
        "webrtc_video_stream.h",
      ]
    }

    deps += [
      "//remoting/proto/remoting/v1:network_traversal_grpc_library",
      "//third_party/webrtc/api:callfactory_api",
      "//third_party/webrtc/api/audio_codecs:audio_codecs_api",
      "//third_party/webrtc/api/audio_codecs/opus:audio_decoder_opus",
      "//third_party/webrtc/api/audio_codecs/opus:audio_encoder_opus",
      "//third_party/webrtc/api/rtc_event_log:rtc_event_log_factory",
      "//third_party/webrtc/api/video_codecs:builtin_video_decoder_factory",
      "//third_party/webrtc/media:rtc_audio_video",
      "//third_party/webrtc_overrides:init_webrtc",
      "//third_party/webrtc_overrides:task_queue_factory",
    ]
  }

  if (enable_remoting_host) {
    sources += [
      "audio_pump.cc",
      "audio_pump.h",
      "audio_writer.cc",
      "audio_writer.h",
      "capture_scheduler.cc",
      "capture_scheduler.h",
      "ice_connection_to_client.cc",
      "ice_connection_to_client.h",
      "video_frame_pump.cc",
      "video_frame_pump.h",
    ]
    deps += [ "//remoting/codec:encoder" ]
  }
}

static_library("test_support") {
  testonly = true

  sources = [
    "fake_authenticator.cc",
    "fake_authenticator.h",
    "fake_connection_to_host.cc",
    "fake_connection_to_host.h",
    "fake_datagram_socket.cc",
    "fake_datagram_socket.h",
    "fake_message_pipe.cc",
    "fake_message_pipe.h",
    "fake_message_pipe_wrapper.cc",
    "fake_message_pipe_wrapper.h",
    "fake_session.cc",
    "fake_session.h",
    "fake_stream_socket.cc",
    "fake_stream_socket.h",
    "fake_video_renderer.cc",
    "fake_video_renderer.h",
    "protocol_mock_objects.cc",
    "protocol_mock_objects.h",
  ]

  if (enable_remoting_host) {
    sources += [
      "fake_audio_source.cc",
      "fake_audio_source.h",
      "fake_connection_to_client.cc",
      "fake_connection_to_client.h",
      "fake_desktop_capturer.cc",
      "fake_desktop_capturer.h",
    ]
  }

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

source_set("unit_tests") {
  testonly = true

  sources = [
    "audio_decode_scheduler_unittest.cc",
    "authenticator_test_base.cc",
    "authenticator_test_base.h",
    "channel_multiplexer_unittest.cc",
    "channel_socket_adapter_unittest.cc",
    "chromium_socket_factory_unittest.cc",
    "client_video_dispatcher_unittest.cc",
    "clipboard_echo_filter_unittest.cc",
    "clipboard_filter_unittest.cc",
    "connection_tester.cc",
    "connection_tester.h",
    "content_description_unittest.cc",
    "data_channel_manager_unittest.cc",
    "frame_stats_unittest.cc",
    "ice_config_unittest.cc",
    "ice_transport_unittest.cc",
    "input_event_tracker_unittest.cc",
    "input_filter_unittest.cc",
    "jingle_messages_unittest.cc",
    "jingle_session_unittest.cc",
    "message_decoder_unittest.cc",
    "message_reader_unittest.cc",
    "monitored_video_stub_unittest.cc",
    "mouse_input_filter_unittest.cc",
    "negotiating_authenticator_unittest.cc",
    "pairing_registry_unittest.cc",
    "port_range_unittest.cc",
    "ppapi_module_stub.cc",
    "pseudotcp_adapter_unittest.cc",
    "remoting_ice_config_request_unittest.cc",
    "sdp_message_unittest.cc",
    "session_config_unittest.cc",
    "spake2_authenticator_unittest.cc",
    "ssl_hmac_channel_authenticator_unittest.cc",
    "third_party_authenticator_unittest.cc",
    "v2_authenticator_unittest.cc",
    "validating_authenticator_unittest.cc",
    "webrtc_transport_unittest.cc",
  ]

  if (enable_remoting_host) {
    sources += [
      "audio_pump_unittest.cc",
      "capture_scheduler_unittest.cc",
      "connection_unittest.cc",
      "video_frame_pump_unittest.cc",
      "webrtc_audio_source_adapter_unittest.cc",
      "webrtc_frame_scheduler_unittest.cc",
    ]
  }

  deps = [
    ":test_support",
    "//net:test_support",
    "//remoting/proto/remoting/v1:network_traversal_grpc_library",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
