# 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",
    "http_ice_config_request.cc",
    "http_ice_config_request.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_info_request.cc",
    "jingle_info_request.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",
    "native_ip_synthesizer.cc",
    "native_ip_synthesizer.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",
    "rfc7050_ip_synthesizer.cc",
    "rfc7050_ip_synthesizer.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/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",
      "rfc7050_prefix_refresher.cc",
      "rfc7050_prefix_refresher.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 += [
      "//third_party/webrtc/api:create_peerconnection_factory",
      "//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/video_codecs:builtin_video_decoder_factory",
      "//third_party/webrtc_overrides:init_webrtc",
    ]
  }

  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",
    "http_ice_config_request_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",
    "rfc7050_ip_synthesizer_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",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
