# Copyright 2014 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("../mojo_sdk_root.gni")
import("$mojo_sdk_root/mojo/public/mojo_application.gni")

if (is_android) {
  import("//build/config/android/rules.gni")

  java_library_path = "$target_out_dir/java_library.dex.jar"

  mojo_android_application("network") {
    output_name = "network_service"
    input_so = "$root_out_dir/lib.stripped/libnetwork_service.so"
    input_dex_jar = java_library_path
  }

  shared_library("native_library") {
    output_name = "network_service"

    sources = [
      "android_hooks.cc",
    ]

    deps = [
      ":sources",
      "//base",
      "//net",
    ]
  }

  android_standalone_library("java_library") {
    dex_path = java_library_path

    deps = [
      "//net/android:net_java",
    ]
  }
} else {
  mojo_native_application("network") {
    output_name = "network_service"

    deps = [
      ":sources",
    ]
  }
}

source_set("lib") {
  sources = [
    "cookie_store_impl.cc",
    "cookie_store_impl.h",
    "net_adapters.cc",
    "net_adapters.h",
    "net_address_type_converters.cc",
    "net_address_type_converters.h",
    "network_context.cc",
    "network_context.h",
    "network_service_impl.cc",
    "network_service_impl.h",
    "tcp_bound_socket_impl.cc",
    "tcp_bound_socket_impl.h",
    "tcp_connected_socket_impl.cc",
    "tcp_connected_socket_impl.h",
    "tcp_server_socket_impl.cc",
    "tcp_server_socket_impl.h",
    "udp_socket_impl.cc",
    "udp_socket_impl.h",
    "url_loader_impl.cc",
    "url_loader_impl.h",
    "web_socket_impl.cc",
    "web_socket_impl.h",
  ]

  deps = [
    "$mojo_sdk_root/mojo/public/cpp/bindings",
    "//base",
    "//mojo/application",
    "//mojo/common",
    "//mojo/environment:chromium",
    "//mojo/services/network/public/cpp",
    "//mojo/services/network/public/interfaces",
    "//net",
    "//url",
  ]
}

source_set("sources") {
  visibility = [ ":*" ]

  sources = [
    "network_service.cc",
  ]

  deps = [
    ":lib",
    "$mojo_sdk_root/mojo/public/c/system:for_shared_library",
    "$mojo_sdk_root/mojo/public/cpp/bindings:bindings",
    "//base",
    "//mojo/application",
    "//mojo/services/network/public/cpp",
    "//mojo/services/network/public/interfaces",
  ]
}

mojo_native_application("apptests") {
  output_name = "network_service_apptests"
  testonly = true

  sources = [
    "udp_socket_apptest.cc",
    "url_loader_impl_apptest.cc",
  ]

  deps = [
    ":lib",
    ":network",
    "$mojo_sdk_root/mojo/public/cpp/bindings",
    "$mojo_sdk_root/mojo/public/cpp/bindings:callback",
    "//base",
    "//mojo/application",
    "//mojo/application:test_support",
    "//mojo/common",
    "//mojo/services/network/public/cpp",
    "//mojo/services/network/public/interfaces",
    "//net",
    "//net:test_support",
    "//testing/gtest",
  ]
}
