# 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("net") {
  output_name = "blimp_net"
  sources = [
    "blimp_connection.cc",
    "blimp_connection.h",
    "blimp_connection_statistics.cc",
    "blimp_connection_statistics.h",
    "blimp_message_checkpoint_observer.h",
    "blimp_message_checkpointer.cc",
    "blimp_message_checkpointer.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_thread_pipe.cc",
    "blimp_message_thread_pipe.h",
    "blimp_net_export.h",
    "blimp_transport.h",
    "blob_channel/blob_channel_receiver.cc",
    "blob_channel/blob_channel_receiver.h",
    "blob_channel/blob_channel_sender.h",
    "blob_channel/blob_channel_sender_impl.cc",
    "blob_channel/blob_channel_sender_impl.h",
    "blob_channel/helium_blob_receiver_delegate.cc",
    "blob_channel/helium_blob_receiver_delegate.h",
    "blob_channel/helium_blob_sender_delegate.cc",
    "blob_channel/helium_blob_sender_delegate.h",
    "browser_connection_handler.cc",
    "browser_connection_handler.h",
    "client_connection_manager.cc",
    "client_connection_manager.h",
    "common.cc",
    "common.h",
    "compressed_packet_reader.cc",
    "compressed_packet_reader.h",
    "compressed_packet_writer.cc",
    "compressed_packet_writer.h",
    "connection_error_observer.h",
    "connection_handler.h",
    "engine_authentication_handler.cc",
    "engine_authentication_handler.h",
    "engine_connection_manager.cc",
    "engine_connection_manager.h",
    "exact_match_cert_verifier.cc",
    "exact_match_cert_verifier.h",
    "input_message_converter.cc",
    "input_message_converter.h",
    "input_message_generator.cc",
    "input_message_generator.h",
    "null_blimp_message_processor.cc",
    "null_blimp_message_processor.h",
    "ssl_client_transport.cc",
    "ssl_client_transport.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",
    "thread_pipe_manager.cc",
    "thread_pipe_manager.h",
  ]

  defines = [ "BLIMP_NET_IMPLEMENTATION=1" ]

  deps = [
    "//base",
    "//blimp/common",
    "//blimp/common/proto",
    "//net",
    "//third_party/WebKit/public:blink_headers",
    "//third_party/zlib",
    "//ui/base/ime:text_input_types",
  ]
}

source_set("test_support") {
  testonly = true

  sources = [
    "blob_channel/mock_blob_channel_receiver.cc",
    "blob_channel/mock_blob_channel_receiver.h",
    "test_common.cc",
    "test_common.h",
  ]

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

source_set("unit_tests") {
  testonly = true

  sources = [
    "blimp_connection_statistics_unittest.cc",
    "blimp_connection_unittest.cc",
    "blimp_message_checkpointer_unittest.cc",
    "blimp_message_demultiplexer_unittest.cc",
    "blimp_message_multiplexer_unittest.cc",
    "blimp_message_output_buffer_unittest.cc",
    "blimp_message_pump_unittest.cc",
    "blimp_message_thread_pipe_unittest.cc",
    "blob_channel/blob_channel_integration_test.cc",
    "blob_channel/blob_channel_receiver_unittest.cc",
    "blob_channel/blob_channel_sender_unittest.cc",
    "blob_channel/helium_blob_channel_unittest.cc",
    "browser_connection_handler_unittest.cc",
    "client_connection_manager_unittest.cc",
    "compressed_packet_unittest.cc",
    "engine_authentication_handler_unittest.cc",
    "engine_connection_manager_unittest.cc",
    "input_message_unittest.cc",
    "ssl_client_transport_unittest.cc",
    "stream_packet_reader_unittest.cc",
    "stream_packet_writer_unittest.cc",
    "tcp_transport_unittest.cc",
    "thread_pipe_manager_unittest.cc",
  ]

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