# 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",
    "mojo_event.cc",
    "mojo_event.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",
    "//mojo/public/cpp/system",
  ]
  deps = [
    "//base",
    "//mojo/public/cpp/bindings",
  ]

  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) {
  source_set("run_all_unittests") {
    testonly = true

    sources = [
      "run_all_unittests.cc",
    ]

    deps = [
      "//base",
      "//base/test:test_support",
      "//mojo/edk/system",
    ]
  }

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