# 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")
import("//tools/ipc_fuzzer/ipc_fuzzer.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",
    "export_template.h",
    "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_templates.h",
    "ipc_message_templates_impl.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",
    "message_router.cc",
    "message_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_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" ]
  }

  if (enable_ipc_fuzzer) {
    public_configs = [ "//tools/ipc_fuzzer:ipc_fuzzer_config" ]
  }
}

# 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",
  ]
}

if (!is_ios) {
  test("ipc_tests") {
    sources = [
      "attachment_broker_mac_unittest.cc",
      "attachment_broker_privileged_mac_unittest.cc",
      "attachment_broker_privileged_win_unittest.cc",
      "ipc_channel_posix_unittest.cc",
      "ipc_channel_proxy_unittest.cc",
      "ipc_channel_reader_unittest.cc",
      "ipc_fuzzing_tests.cc",
      "ipc_message_attachment_set_posix_unittest.cc",
      "ipc_message_unittest.cc",
      "ipc_message_utils_unittest.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",
      "run_all_unittests.cc",
      "sync_socket_unittest.cc",
    ]

    if (!is_win && !is_ios) {
      sources += [ "unix_domain_socket_util_unittest.cc" ]
    }

    if (!is_android) {
      sources += [ "ipc_channel_unittest.cc" ]
    }

    if (!is_ios) {
      sources += [ "ipc_send_fds_test.cc" ]
    }

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

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

    if (is_mac) {
      deps += [ "//sandbox/mac:seatbelt" ]
    }
  }

  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"
    #}

    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",
    ]
  }
}
