# 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.

# GYP version: mojo/mojo_services.gypi:mojo_network_service
shared_library("network") {
  output_name = "network_service"
  sources = [ "main.cc" ]
  deps = [
    ":lib",
    "//base",
    "//mojo/application",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/cpp/bindings:bindings",
    "//mojo/services/public/cpp/network",
    "//mojo/services/public/interfaces/network",
  ]
}

# GYP version: mojo/mojo_services.gypi:mojo_network_service_lib
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/services/public/cpp/network",
    "//mojo/services/public/interfaces/network",
    "//net",
    "//url",
  ]
}

test("unittests") {
  output_name = "network_service_unittests"
  deps = [
    ":network",
    "//base",
    "//base/test:test_support",
    "//mojo/application_manager",
    "//mojo/edk/system",
    "//mojo/edk/test:run_all_unittests",
    "//mojo/environment:chromium",
    "//mojo/services/public/cpp/network",
    "//mojo/services/public/interfaces/network",
    "//mojo/shell:test_support",
    "//testing/gtest",
  ]

  sources = [
    "udp_socket_unittest.cc",
  ]
}
