# 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("//third_party/mojo/src/mojo/public/mojo_application.gni")

if (is_android) {
  mojo_android_application("network") {
    output_name = "network_service"

    sources = [
      "android_hooks.cc",
    ]

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

    java_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",
    "host_resolver_impl.cc",
    "host_resolver_impl.h",
    "http_connection_impl.cc",
    "http_connection_impl.h",
    "http_server_impl.cc",
    "http_server_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_delegate.cc",
    "network_service_delegate.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/services/network/public/cpp",
    "//mojo/services/network/public/interfaces",
    "//net",
    "//net:http_server",
    "//third_party/mojo/src/mojo/public/cpp/application",
    "//url",
  ]
}

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

  sources = [
    "main.cc",
  ]

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

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

  sources = [
    "host_resolver_apptest.cc",
    "http_server_apptest.cc",
    "udp_socket_apptest.cc",
    "url_loader_impl_apptest.cc",
    "url_loader_interceptor_apptest.cc",
  ]

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