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

import("//testing/test.gni")

component("ipc") {
  sources = [
    "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_attachment.cc",
    "ipc_message_attachment.h",
    "ipc_message_attachment_set.cc",
    "ipc_message_attachment_set.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_platform_file_attachment_posix.cc",
    "ipc_platform_file_attachment_posix.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.cc",
      "ipc_channel_posix.cc",
      "unix_domain_socket_util.cc",
    ]
  } else {
    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(GYP): crbug.com/360936. Get this to build and run on Android.
if (!is_android) {
  test("ipc_tests") {
    sources = [
      "ipc_channel_posix_unittest.cc",
      "ipc_channel_unittest.cc",
      "ipc_fuzzing_tests.cc",
      "ipc_message_attachment_set_posix_unittest.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_security_test_util.cc",
    "ipc_security_test_util.h",
    "ipc_test_base.cc",
    "ipc_test_base.h",
    "ipc_test_channel_listener.cc",
    "ipc_test_channel_listener.h",
    "ipc_test_sink.cc",
    "ipc_test_sink.h",
  ]
  deps = [
    ":ipc",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}
