# 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("//net/features.gni")
import("//services/network/public/cpp/features.gni")
import("//services/service_manager/public/service_manifest.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",
    "dns_config_change_manager.cc",
    "dns_config_change_manager.h",
    "empty_url_loader_client.cc",
    "empty_url_loader_client.h",
    "host_resolver.cc",
    "host_resolver.h",
    "http_auth_cache_copier.cc",
    "http_auth_cache_copier.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",
    "initiator_lock_compatibility.cc",
    "initiator_lock_compatibility.h",
    "keepalive_statistics_recorder.cc",
    "keepalive_statistics_recorder.h",
    "loader_util.cc",
    "loader_util.h",
    "mojo_host_resolver_impl.cc",
    "mojo_host_resolver_impl.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_qualities_pref_delegate.cc",
    "network_qualities_pref_delegate.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",
    "pending_callback_chain.cc",
    "pending_callback_chain.h",
    "proxy_config_service_mojo.cc",
    "proxy_config_service_mojo.h",
    "proxy_lookup_request.cc",
    "proxy_lookup_request.h",
    "proxy_resolver_factory_mojo.cc",
    "proxy_resolver_factory_mojo.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",
    "proxy_service_mojo.cc",
    "proxy_service_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 (enable_mdns) {
    sources += [
      "mdns_responder.cc",
      "mdns_responder.h",
    ]
  }

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

  if (is_chromeos) {
    sources += [
      "cert_verifier_with_trust_anchors.cc",
      "cert_verifier_with_trust_anchors.h",
      "cert_verify_proc_chromeos.cc",
      "cert_verify_proc_chromeos.h",
      "nss_temp_certs_cache_chromeos.cc",
      "nss_temp_certs_cache_chromeos.h",
    ]
  }

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

  deps = [
    "//base",
    "//components/content_settings/core/common",
    "//components/cookie_config",
    "//components/domain_reliability",
    "//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",
  ]

  public_deps = [
    "//services/network/public/cpp:buildflags",
  ]

  if (is_ct_supported) {
    sources += [
      "expect_ct_reporter.cc",
      "expect_ct_reporter.h",
    ]
    deps += [ "//components/certificate_transparency" ]
  }

  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" ]
  }

  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_factory_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",
    "dns_config_change_manager_unittest.cc",
    "host_resolver_unittest.cc",
    "http_cache_data_counter_unittest.cc",
    "http_cache_data_remover_unittest.cc",
    "ignore_errors_cert_verifier_unittest.cc",
    "initiator_lock_compatibility_unittest.cc",
    "keepalive_statistics_recorder_unittest.cc",
    "mojo_host_resolver_impl_unittest.cc",
    "network_change_manager_unittest.cc",
    "network_context_unittest.cc",
    "network_qualities_pref_delegate_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",
    "pending_callback_chain_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 (enable_mdns) {
    sources += [ "mdns_responder_unittest.cc" ]
  }

  if (!is_ios) {
    sources += [
      "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/",
    ]
  }

  if (is_chromeos) {
    sources += [
      "cert_verifier_with_trust_anchors_unittest.cc",
      "cert_verify_proc_chromeos_unittest.cc",
      "nss_temp_certs_cache_chromeos_unittest.cc",
    ]
  }

  deps = [
    ":network_service",
    ":test_support",
    "//base",
    "//components/network_session_configurator/browser",
    "//components/prefs:test_support",
    "//components/variations:test_support",
    "//crypto:test_support",
    "//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/cpp:buildflags",
    "//services/network/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/cpp/test:test_support",
    "//testing/gtest",
  ]

  if (is_ct_supported) {
    sources += [
      "expect_ct_reporter_unittest.cc",
      "network_context_cert_transparency_unittest.cc",
    ]
    deps += [ "//components/certificate_transparency" ]
  }
}

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/cpp:buildflags",
    "//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"
}
