# Copyright 2017 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/jumbo.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//services/service_manager/public/tools/test/service_test.gni")

jumbo_component("network_service") {
  sources = [
    "cert_verifier_config_type_converter.cc",
    "cert_verifier_config_type_converter.h",
    "chunked_data_pipe_upload_data_stream.cc",
    "chunked_data_pipe_upload_data_stream.h",
    "conditional_cache_deletion_helper.cc",
    "conditional_cache_deletion_helper.h",
    "cookie_manager.cc",
    "cookie_manager.h",
    "cookie_settings.cc",
    "cookie_settings.h",
    "cors/cors_url_loader.cc",
    "cors/cors_url_loader.h",
    "cors/cors_url_loader_factory.cc",
    "cors/cors_url_loader_factory.h",
    "cors/preflight_controller.cc",
    "cors/preflight_controller.h",
    "crl_set_distributor.cc",
    "crl_set_distributor.h",
    "cross_origin_read_blocking.cc",
    "cross_origin_read_blocking.h",
    "data_pipe_element_reader.cc",
    "data_pipe_element_reader.h",
    "empty_url_loader_client.cc",
    "empty_url_loader_client.h",
    "expect_ct_reporter.cc",
    "expect_ct_reporter.h",
    "host_resolver.cc",
    "host_resolver.h",
    "http_cache_data_counter.cc",
    "http_cache_data_counter.h",
    "http_cache_data_remover.cc",
    "http_cache_data_remover.h",
    "http_server_properties_pref_delegate.cc",
    "http_server_properties_pref_delegate.h",
    "ignore_errors_cert_verifier.cc",
    "ignore_errors_cert_verifier.h",
    "keepalive_statistics_recorder.cc",
    "keepalive_statistics_recorder.h",
    "loader_util.cc",
    "loader_util.h",
    "net_log_capture_mode_type_converter.cc",
    "net_log_capture_mode_type_converter.h",
    "net_log_exporter.cc",
    "net_log_exporter.h",
    "network_change_manager.cc",
    "network_change_manager.h",
    "network_context.cc",
    "network_context.h",
    "network_quality_estimator_manager.cc",
    "network_quality_estimator_manager.h",
    "network_sandbox_hook_linux.cc",
    "network_sandbox_hook_linux.h",
    "network_sandbox_win.cc",
    "network_sandbox_win.h",
    "network_service.cc",
    "network_service.h",
    "network_service_network_delegate.cc",
    "network_service_network_delegate.h",
    "network_service_proxy_delegate.cc",
    "network_service_proxy_delegate.h",
    "network_usage_accumulator.cc",
    "network_usage_accumulator.h",
    "p2p/socket.cc",
    "p2p/socket.h",
    "p2p/socket_manager.cc",
    "p2p/socket_manager.h",
    "p2p/socket_tcp.cc",
    "p2p/socket_tcp.h",
    "p2p/socket_tcp_server.cc",
    "p2p/socket_tcp_server.h",
    "p2p/socket_throttler.cc",
    "p2p/socket_throttler.h",
    "p2p/socket_udp.cc",
    "p2p/socket_udp.h",
    "proxy_config_service_mojo.cc",
    "proxy_config_service_mojo.h",
    "proxy_lookup_request.cc",
    "proxy_lookup_request.h",
    "proxy_resolving_client_socket.cc",
    "proxy_resolving_client_socket.h",
    "proxy_resolving_client_socket_factory.cc",
    "proxy_resolving_client_socket_factory.h",
    "proxy_resolving_socket_factory_mojo.cc",
    "proxy_resolving_socket_factory_mojo.h",
    "proxy_resolving_socket_mojo.cc",
    "proxy_resolving_socket_mojo.h",
    "resolve_host_request.cc",
    "resolve_host_request.h",
    "resource_scheduler.cc",
    "resource_scheduler.h",
    "resource_scheduler_client.cc",
    "resource_scheduler_client.h",
    "resource_scheduler_params_manager.cc",
    "resource_scheduler_params_manager.h",
    "restricted_cookie_manager.cc",
    "restricted_cookie_manager.h",
    "session_cleanup_channel_id_store.cc",
    "session_cleanup_channel_id_store.h",
    "session_cleanup_cookie_store.cc",
    "session_cleanup_cookie_store.h",
    "socket_data_pump.cc",
    "socket_data_pump.h",
    "socket_factory.cc",
    "socket_factory.h",
    "ssl_config_service_mojo.cc",
    "ssl_config_service_mojo.h",
    "ssl_config_type_converter.cc",
    "ssl_config_type_converter.h",
    "tcp_bound_socket.cc",
    "tcp_bound_socket.h",
    "tcp_connected_socket.cc",
    "tcp_connected_socket.h",
    "tcp_server_socket.cc",
    "tcp_server_socket.h",
    "throttling/network_conditions.cc",
    "throttling/network_conditions.h",
    "throttling/scoped_throttling_token.cc",
    "throttling/scoped_throttling_token.h",
    "throttling/throttling_controller.cc",
    "throttling/throttling_controller.h",
    "throttling/throttling_network_interceptor.cc",
    "throttling/throttling_network_interceptor.h",
    "throttling/throttling_network_transaction.cc",
    "throttling/throttling_network_transaction.h",
    "throttling/throttling_network_transaction_factory.cc",
    "throttling/throttling_network_transaction_factory.h",
    "throttling/throttling_upload_data_stream.cc",
    "throttling/throttling_upload_data_stream.h",
    "tls_client_socket.cc",
    "tls_client_socket.h",
    "tls_socket_factory.cc",
    "tls_socket_factory.h",
    "transitional_url_loader_factory_owner.cc",
    "transitional_url_loader_factory_owner.h",
    "udp_socket.cc",
    "udp_socket.h",
    "upload_progress_tracker.cc",
    "upload_progress_tracker.h",
    "url_loader.cc",
    "url_loader.h",
    "url_loader_factory.cc",
    "url_loader_factory.h",
    "url_request_context_builder_mojo.cc",
    "url_request_context_builder_mojo.h",
    "url_request_context_owner.cc",
    "url_request_context_owner.h",
  ]

  if (!is_ios) {
    sources += [
      "websocket.cc",
      "websocket.h",
      "websocket_factory.cc",
      "websocket_factory.h",
      "websocket_throttler.cc",
      "websocket_throttler.h",
    ]
  }

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    "//base",
    "//components/certificate_transparency",
    "//components/content_settings/core/common",
    "//components/cookie_config",
    "//components/network_session_configurator/browser",
    "//components/network_session_configurator/common",
    "//components/os_crypt",
    "//components/prefs",
    "//jingle:jingle_fake_socket",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//net",
    "//net:extras",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//services/service_manager/sandbox:sandbox",
    "//third_party/webrtc/media:rtc_media_base",
    "//third_party/webrtc/rtc_base",
    "//third_party/webrtc/rtc_base:timeutils",
    "//third_party/webrtc_overrides",
    "//third_party/webrtc_overrides:init_webrtc",
    "//url",
  ]

  if (is_linux) {
    deps += [
      "//sandbox/linux:sandbox_services",
      "//services/service_manager/sandbox:sandbox",
    ]
  }

  if (is_android) {
    deps += [
      "//crypto",
      "//third_party/boringssl",
    ]
  }

  if (is_win) {
    deps += [ "//sandbox/win:sandbox" ]
  }

  sources += [
    "proxy_resolver_factory_mojo.cc",
    "proxy_resolver_factory_mojo.h",
    "proxy_service_mojo.cc",
    "proxy_service_mojo.h",
  ]
  deps += [ "//net/dns:mojo_service" ]

  defines = [ "IS_NETWORK_SERVICE_IMPL" ]

  if (is_chromecast) {
    defines += [ "IS_CHROMECAST" ]
  }
}

source_set("tests") {
  testonly = true

  sources = [
    "chunked_data_pipe_upload_data_stream_unittest.cc",
    "cookie_manager_unittest.cc",
    "cookie_settings_unittest.cc",
    "cors/cors_url_loader_unittest.cc",
    "cors/preflight_controller_unittest.cc",
    "cross_origin_read_blocking_unittest.cc",
    "data_pipe_element_reader_unittest.cc",
    "expect_ct_reporter_unittest.cc",
    "host_resolver_unittest.cc",
    "http_cache_data_counter_unittest.cc",
    "http_cache_data_remover_unittest.cc",
    "ignore_errors_cert_verifier_unittest.cc",
    "keepalive_statistics_recorder_unittest.cc",
    "network_change_manager_unittest.cc",
    "network_context_unittest.cc",
    "network_quality_estimator_manager_unittest.cc",
    "network_service_proxy_delegate_unittest.cc",
    "network_service_unittest.cc",
    "network_usage_accumulator_unittest.cc",
    "p2p/socket_tcp_server_unittest.cc",
    "p2p/socket_tcp_unittest.cc",
    "p2p/socket_test_utils.cc",
    "p2p/socket_test_utils.h",
    "p2p/socket_udp_unittest.cc",
    "proxy_config_service_mojo_unittest.cc",
    "proxy_resolving_client_socket_unittest.cc",
    "proxy_resolving_socket_mojo_unittest.cc",
    "resource_scheduler_params_manager_unittest.cc",
    "resource_scheduler_unittest.cc",
    "restricted_cookie_manager_unittest.cc",
    "session_cleanup_channel_id_store_unittest.cc",
    "session_cleanup_cookie_store_unittest.cc",
    "socket_data_pump_unittest.cc",
    "ssl_config_service_mojo_unittest.cc",
    "tcp_bound_socket_unittest.cc",
    "tcp_socket_unittest.cc",
    "test/test_url_loader_factory_unittest.cc",
    "test_chunked_data_pipe_getter.cc",
    "test_chunked_data_pipe_getter.h",
    "throttling/throttling_controller_unittest.cc",
    "tls_client_socket_unittest.cc",
    "transitional_url_loader_factory_owner_unittest.cc",
    "udp_socket_unittest.cc",
    "upload_progress_tracker_unittest.cc",
    "url_loader_unittest.cc",
  ]

  if (!is_ios) {
    sources += [
      "network_context_cert_transparency_unittest.cc",
      "proxy_resolver_factory_mojo_unittest.cc",
      "websocket_throttler_unittest.cc",
    ]

    data = [
      "//net/tools/testserver/",
      "//services/test/data",
      "//third_party/pyftpdlib/",
      "//third_party/pywebsocket/src/mod_pywebsocket/",
      "//third_party/tlslite/",
    ]
  }

  deps = [
    ":network_service",
    ":test_support",
    "//base",
    "//components/certificate_transparency",
    "//components/network_session_configurator/browser",
    "//jingle:jingle_fake_socket",
    "//mojo/core/embedder",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//net",
    "//net:extras",
    "//net:test_support",
    "//net/http:transport_security_state_unittest_data_default",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/cpp:service_test_support",
    "//testing/gtest",
  ]
}

jumbo_source_set("test_support") {
  testonly = true

  sources = [
    "mojo_socket_test_util.cc",
    "mojo_socket_test_util.h",
    "test/test_data_pipe_getter.cc",
    "test/test_data_pipe_getter.h",
    "test/test_network_connection_tracker.cc",
    "test/test_network_connection_tracker.h",
    "test/test_network_context.h",
    "test/test_network_quality_tracker.cc",
    "test/test_network_quality_tracker.h",
    "test/test_network_service_client.cc",
    "test/test_network_service_client.h",
    "test/test_shared_url_loader_factory.cc",
    "test/test_shared_url_loader_factory.h",
    "test/test_url_loader_client.cc",
    "test/test_url_loader_client.h",
    "test/test_url_loader_factory.cc",
    "test/test_url_loader_factory.h",
    "test/test_utils.cc",
    "test/test_utils.h",
    "udp_socket_test_util.cc",
    "udp_socket_test_util.h",
  ]

  public_deps = [
    "//services/network/public/cpp",
    "//services/network/public/mojom",
  ]

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

service_manifest("manifest") {
  name = "network"
  source = "manifest.json"
}

service_manifest("unittest_manifest") {
  name = "network_unittests"
  source = "test/service_unittest_manifest.json"
  packaged_services = [ ":manifest" ]
}

catalog("tests_catalog") {
  testonly = true
  embedded_services = [ ":unittest_manifest" ]
}
