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

  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 = [
    "//base",
    "//mojo/application",
    "//mojo/common",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//mojo/services/network/public/cpp",
    "//mojo/services/network/public/interfaces",
    "//net",
    "//url",
  ]
}

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

  sources = [
    "network_service.cc",
  ]

  deps = [
    ":lib",
    "//base",
    "//mojo/application",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/bindings:bindings",
    "//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",
  ]

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