# 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_common.cc",
    "ipc_channel_factory.cc",
    "ipc_channel_factory.h",
    "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 -= [
      "ipc_channel_factory.cc",
      "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",
      "ipc_test_base.cc",
      "ipc_test_base.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_ipc",
      "//base",
      "//base:i18n",
      "//base/test:run_all_unittests",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }

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

    # 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_ipc",
      "//base",
      "//base:i18n",
      "//base/test:test_support",
      "//base/test:test_support_perf",
      "//testing/gtest",
    ]
  }
}

static_library("test_support_ipc") {
  sources = [
    "ipc_multiprocess_test.cc",
    "ipc_multiprocess_test.h",
    "ipc_test_sink.cc",
    "ipc_test_sink.h",
  ]
  deps = [
    ":ipc",
    "//base",
    "//testing/gtest",
  ]
}

