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

component("blimp_net") {
  sources = [
    "blimp_connection.cc",
    "blimp_connection.h",
    "blimp_message_checkpoint_observer.h",
    "blimp_message_demultiplexer.cc",
    "blimp_message_demultiplexer.h",
    "blimp_message_multiplexer.cc",
    "blimp_message_multiplexer.h",
    "blimp_message_output_buffer.cc",
    "blimp_message_output_buffer.h",
    "blimp_message_processor.h",
    "blimp_message_pump.cc",
    "blimp_message_pump.h",
    "blimp_message_receiver.h",
    "blimp_net_export.h",
    "blimp_transport.h",
    "browser_connection_handler.cc",
    "browser_connection_handler.h",
    "client_connection_manager.cc",
    "client_connection_manager.h",
    "common.cc",
    "common.h",
    "connection_error_observer.h",
    "connection_handler.h",
    "engine_authentication_handler.cc",
    "engine_authentication_handler.h",
    "engine_connection_manager.cc",
    "engine_connection_manager.h",
    "input_message_generator.cc",
    "input_message_generator.h",
    "input_message_processor.cc",
    "input_message_processor.h",
    "null_blimp_message_processor.cc",
    "null_blimp_message_processor.h",
    "stream_packet_reader.cc",
    "stream_packet_reader.h",
    "stream_packet_writer.cc",
    "stream_packet_writer.h",
    "stream_socket_connection.cc",
    "stream_socket_connection.h",
    "tcp_client_transport.cc",
    "tcp_client_transport.h",
    "tcp_engine_transport.cc",
    "tcp_engine_transport.h",
  ]

  defines = [ "BLIMP_NET_IMPLEMENTATION=1" ]

  deps = [
    "//base",
    "//blimp/common:blimp_common",
    "//blimp/common/proto",
    "//net",
  ]
}

source_set("test_support") {
  testonly = true

  sources = [
    "blimp_net_test_export.h",
    "test_common.cc",
    "test_common.h",
  ]

  deps = [
    ":blimp_net",
    "//blimp/common/proto",
    "//net:test_support",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "blimp_connection_unittest.cc",
    "blimp_message_demultiplexer_unittest.cc",
    "blimp_message_multiplexer_unittest.cc",
    "blimp_message_output_buffer_unittest.cc",
    "blimp_message_pump_unittest.cc",
    "client_connection_manager_unittest.cc",
    "engine_authentication_handler_unittest.cc",
    "engine_connection_manager_unittest.cc",
    "input_message_unittest.cc",
    "stream_packet_reader_unittest.cc",
    "stream_packet_writer_unittest.cc",
    "tcp_transport_unittest.cc",
  ]

  deps = [
    ":blimp_net",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//blimp/common/proto",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
