# 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("//build/config/nacl/config.gni")
import("//testing/test.gni")

component("ipc") {
  sources = [
    "attachment_broker.cc",
    "attachment_broker.h",
    "attachment_broker_messages.h",
    "attachment_broker_privileged.cc",
    "attachment_broker_privileged.h",
    "attachment_broker_privileged_mac.cc",
    "attachment_broker_privileged_mac.h",
    "attachment_broker_privileged_win.cc",
    "attachment_broker_privileged_win.h",
    "attachment_broker_unprivileged.cc",
    "attachment_broker_unprivileged.h",
    "attachment_broker_unprivileged_mac.cc",
    "attachment_broker_unprivileged_mac.h",
    "attachment_broker_unprivileged_win.cc",
    "attachment_broker_unprivileged_win.h",
    "brokerable_attachment.cc",
    "brokerable_attachment.h",
    "brokerable_attachment_mac.cc",
    "brokerable_attachment_win.cc",
    "handle_attachment_win.cc",
    "handle_attachment_win.h",
    "handle_win.cc",
    "handle_win.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_endpoint.cc",
    "ipc_endpoint.h",
    "ipc_export.h",
    "ipc_handle_win.cc",
    "ipc_handle_win.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_generator.cc",
    "ipc_message_generator.h",
    "ipc_message_macros.h",
    "ipc_message_start.h",
    "ipc_message_utils.cc",
    "ipc_message_utils.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",
    "mach_port_attachment_mac.cc",
    "mach_port_attachment_mac.h",
    "mach_port_mac.cc",
    "mach_port_mac.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",
    "placeholder_brokerable_attachment.cc",
    "placeholder_brokerable_attachment.h",
    "struct_constructor_macros.h",
    "struct_destructor_macros.h",
    "unix_domain_socket_util.cc",
    "unix_domain_socket_util.h",
  ]

  if (is_nacl && !is_nacl_nonsfi) {
    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 || is_nacl_nonsfi) {
    sources -= [ "unix_domain_socket_util.cc" ]
  }

  defines = [ "IPC_IMPLEMENTATION" ]

  public_deps = [
    ":param_traits",
  ]
  deps = [
    "//base",

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

  if (is_win || is_mac) {
    # On Windows HandleAttachmentWin needs to generate random IDs.
    # On Mac MachPortAttachmentMac needs to generate random IDs.
    deps += [ "//crypto" ]
  }
}

# This is provided as a separate target so other targets can provide param
# traits implementations without necessarily linking to all of IPC.
source_set("param_traits") {
  public = [
    "ipc_param_traits.h",
  ]
}

group("ipc_tests_run") {
  testonly = true
  deps = [
    ":ipc_tests",
  ]
}

test("ipc_tests") {
  sources = [
    "attachment_broker_mac_unittest.cc",
    "attachment_broker_privileged_mac_unittest.cc",
    "attachment_broker_privileged_win_unittest.cc",
    "attachment_broker_unprivileged_win_unittest.cc",
    "ipc_channel_posix_unittest.cc",
    "ipc_channel_proxy_unittest.cc",
    "ipc_channel_reader_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",
    "ipc_test_message_generator.cc",
    "ipc_test_message_generator.h",
    "ipc_test_messages.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",
    "//crypto",
    "//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",
  ]
}

source_set("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",
    "test_util_mac.cc",
    "test_util_mac.h",
  ]
  public_deps = [
    ":ipc",
  ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}
