# Copyright (c) 2012 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("ipc") {
  sources = [
    "file_descriptor_set_posix.cc",
    "file_descriptor_set_posix.h",
    "ipc_channel.cc",
    "ipc_channel.h",
    "ipc_channel_factory.cc",
    "ipc_channel_factory.h",
    "ipc_channel_common.cc",
    "ipc_channel_handle.h",
    "ipc_channel_nacl.cc",
    "ipc_channel_nacl.h",
    "ipc_channel_posix.cc",
    "ipc_channel_posix.h",
    "ipc_channel_proxy.cc",
    "ipc_channel_proxy.h",
    "ipc_channel_reader.cc",
    "ipc_channel_reader.h",
    "ipc_channel_win.cc",
    "ipc_channel_win.h",
    "ipc_descriptors.h",
    "ipc_export.h",
    "ipc_forwarding_message_filter.cc",
    "ipc_forwarding_message_filter.h",
    "ipc_listener.h",
    "ipc_logging.cc",
    "ipc_logging.h",
    "ipc_message.cc",
    "ipc_message.h",
    "ipc_message_macros.h",
    "ipc_message_start.h",
    "ipc_message_utils.cc",
    "ipc_message_utils.h",
    "ipc_param_traits.h",
    "ipc_platform_file.cc",
    "ipc_platform_file.h",
    "ipc_sender.h",
    "ipc_switches.cc",
    "ipc_switches.h",
    "ipc_sync_channel.cc",
    "ipc_sync_channel.h",
    "ipc_sync_message.cc",
    "ipc_sync_message.h",
    "ipc_sync_message_filter.cc",
    "ipc_sync_message_filter.h",
    "message_filter.cc",
    "message_filter.h",
    "message_filter_router.cc",
    "message_filter_router.h",
    "param_traits_log_macros.h",
    "param_traits_macros.h",
    "param_traits_read_macros.h",
    "param_traits_write_macros.h",
    "struct_constructor_macros.h",
    "struct_destructor_macros.h",
    "unix_domain_socket_util.cc",
    "unix_domain_socket_util.h",
  ]

  if (!is_nacl) {
    sources -= [
      "ipc_channel_nacl.cc",
      "ipc_channel_nacl.h",
    ]
  }

  if (is_win || is_ios) {
    sources -= [
      "unix_domain_socket_util.cc",
    ]
  }

  defines = [ "IPC_IMPLEMENTATION" ]

  deps = [
    "//base",
    # TODO(viettrungluu): Needed for base/lazy_instance.h, which is suspect.
    "//base/third_party/dynamic_annotations",
  ]
}

# TODO(dpranke): crbug.com/360936. Get this to build and run on Android.
if (!is_android) {
  test("ipc_tests") {
    sources = [
      "file_descriptor_set_posix_unittest.cc",
      "ipc_channel_posix_unittest.cc",
      "ipc_channel_unittest.cc",
      "ipc_fuzzing_tests.cc",
      "ipc_message_unittest.cc",
      "ipc_message_utils_unittest.cc",
      "ipc_send_fds_test.cc",
      "ipc_sync_channel_unittest.cc",
      "ipc_sync_message_unittest.cc",
      "ipc_sync_message_unittest.h",
      "sync_socket_unittest.cc",
      "unix_domain_socket_util_unittest.cc",
    ]

    if (is_win || is_ios) {
      sources -= [ "unix_domain_socket_util_unittest.cc" ]
    }

    # TODO(brettw) hook up Android testing.
    #if (is_android && gtest_target_type == "shared_library") {
    #  deps += "/testing/android/native_test.gyp:native_testNative_code"
    #}

    # TODO(brettw) hook up tcmalloc to this target.
    #if (is_posix && !is_mac && !is_android) {
    #  if (use_allocator!="none") {
    #    deps += "/base/allocator"
    #  }
    #}

    deps = [
      ":ipc",
      ":test_support",
      "//base",
      "//base:i18n",
      "//base/test:run_all_unittests",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }

  test("ipc_perftests") {
    sources = [
      "ipc_perftests.cc",
    ]

    # TODO(brettw) hook up Android testing.
    #if (is_android && gtest_target_type == "shared_library") {
    #  deps += "/testing/android/native_test.gyp:native_testNative_code"
    #}

    # TODO(brettw) hook up tcmalloc to this target.
    #if (is_posix && !is_mac && !is_android) {
    #  if (use_allocator!="none") {
    #    deps += "//base/allocator"
    #  }
    #}

    deps = [
      ":ipc",
      ":test_support",
      "//base",
      "//base:i18n",
      "//base/test:test_support",
      "//base/test:test_support_perf",
      "//testing/gtest",
    ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "ipc_multiprocess_test.cc",
    "ipc_multiprocess_test.h",
    "ipc_perftest_support.cc",
    "ipc_perftest_support.h",
    "ipc_test_sink.cc",
    "ipc_test_sink.h",
    "ipc_test_base.cc",
    "ipc_test_base.h",
    "ipc_test_channel_listener.h",
    "ipc_test_channel_listener.cc",
  ]
  deps = [
    ":ipc",
    "//base",
    "//testing/gtest",
  ]
}

