# Copyright (c) 2013 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/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//build/module_args/v8.gni")
import("//url/config.gni")

# TODO(cjhopman): //build/config/android/rules.gni also imports grit_rule.gni.
# Currently, that file can't be imported multiple times.  Make this always
# imported when http://crbug.com/393704 is fixed.
if (!is_android) {
  import("//tools/grit/grit_rule.gni")
}

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
} else if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
}

# The list of net files is kept in net.gypi. Read it.
gypi_values = exec_script("//build/gypi_to_gn.py",
                          [ rebase_path("net.gypi") ],
                          "scope",
                          [ "net.gypi" ])

# Disable Kerberos on ChromeOS, Android and iOS, at least for now. It needs
# configuration (krb5.conf and so on).
use_kerberos = !is_chromeos && !is_android && !is_ios

# The way the cache uses mmap() is inefficient on some Android devices. If
# this flag is set, we hackily avoid using mmap() in the disk cache. We are
# pretty confident that mmap-ing the index would not hurt any existing x86
# android devices, but we cannot be so sure about the variety of ARM devices.
# So enable it for x86 only for now.
posix_avoid_mmap = is_android && cpu_arch != "x86"

# WebSockets and socket stream code are used everywhere except iOS.
enable_websockets = !is_ios
use_v8_in_net = !is_ios
enable_built_in_dns = !is_ios
disable_ftp_support = is_ios

declare_args() {
  # Disables support for file URLs.  File URL support requires use of icu.
  disable_file_support = false
}

config("net_config") {
  defines = []
  if (posix_avoid_mmap) {
    defines += [ "POSIX_AVOID_MMAP" ]
  }
  if (disable_file_support) {
    defines += [ "DISABLE_FILE_SUPPORT" ]
  }
}

# Disables Windows warning about size to int truncations.
# TODO(jschuh): crbug.com/167187 fix this and delete this config.
config("net_win_size_truncation") {
  if (is_win) {
    cflags = [ "/wd4267" ]
  }
}

component("net") {
  sources =
      gypi_values.net_nacl_common_sources + gypi_values.net_non_nacl_sources

  cflags = []
  defines = [
    # TODO(GYP) Note that he GYP file supports linux_link_kerberos (defaults to
    # 0) which implies that we run pkg_config on kerberos and link to that
    # rather than setting this define which will dynamically open it. That
    # doesn't seem to be set in the regular builds, so we're skipping this
    # capability here.
    "DLOPEN_KERBEROS",
    "NET_IMPLEMENTATION",
  ]
  configs += [ ":net_win_size_truncation" ]
  public_configs = [ ":net_config" ]
  include_dirs = []

  public_deps = [
    "//crypto",
    "//crypto:platform",
  ]
  deps = [
    ":net_resources",
    "//base",
    "//base:i18n",
    "//base:prefs",
    "//base/third_party/dynamic_annotations",
    "//net/base/registry_controlled_domains",
    "//sdch",
    "//third_party/icu",
    "//third_party/zlib",
    "//url",
  ]

  if (use_kerberos) {
    defines += [ "USE_KERBEROS" ]
    if (is_android) {
      include_dirs += [ "/usr/include/kerberosV" ]
    }
  } else {
    sources -= [
      "http/http_auth_gssapi_posix.cc",
      "http/http_auth_gssapi_posix.h",
      "http/http_auth_handler_negotiate.h",
      "http/http_auth_handler_negotiate.cc",
    ]
  }

  if (is_posix) {
    if (posix_avoid_mmap) {
      sources -= [ "disk_cache/blockfile/mapped_file_posix.cc" ]
    } else {
      sources -= [ "disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc" ]
    }
  }

  if (disable_file_support) {
    sources -= [
      "base/directory_lister.cc",
      "base/directory_lister.h",
      "url_request/url_request_file_dir_job.cc",
      "url_request/url_request_file_dir_job.h",
      "url_request/url_request_file_job.cc",
      "url_request/url_request_file_job.h",
      "url_request/file_protocol_handler.cc",
      "url_request/file_protocol_handler.h",
    ]
  }

  if (disable_ftp_support) {
    sources -= [
      "ftp/ftp_auth_cache.cc",
      "ftp/ftp_auth_cache.h",
      "ftp/ftp_ctrl_response_buffer.cc",
      "ftp/ftp_ctrl_response_buffer.h",
      "ftp/ftp_directory_listing_parser.cc",
      "ftp/ftp_directory_listing_parser.h",
      "ftp/ftp_directory_listing_parser_ls.cc",
      "ftp/ftp_directory_listing_parser_ls.h",
      "ftp/ftp_directory_listing_parser_netware.cc",
      "ftp/ftp_directory_listing_parser_netware.h",
      "ftp/ftp_directory_listing_parser_os2.cc",
      "ftp/ftp_directory_listing_parser_os2.h",
      "ftp/ftp_directory_listing_parser_vms.cc",
      "ftp/ftp_directory_listing_parser_vms.h",
      "ftp/ftp_directory_listing_parser_windows.cc",
      "ftp/ftp_directory_listing_parser_windows.h",
      "ftp/ftp_network_layer.cc",
      "ftp/ftp_network_layer.h",
      "ftp/ftp_network_session.cc",
      "ftp/ftp_network_session.h",
      "ftp/ftp_network_transaction.cc",
      "ftp/ftp_network_transaction.h",
      "ftp/ftp_request_info.h",
      "ftp/ftp_response_info.cc",
      "ftp/ftp_response_info.h",
      "ftp/ftp_server_type_histograms.cc",
      "ftp/ftp_server_type_histograms.h",
      "ftp/ftp_transaction.h",
      "ftp/ftp_transaction_factory.h",
      "ftp/ftp_util.cc",
      "ftp/ftp_util.h",
      "url_request/ftp_protocol_handler.cc",
      "url_request/ftp_protocol_handler.h",
      "url_request/url_request_ftp_job.cc",
      "url_request/url_request_ftp_job.h",
    ]
  }

  if (enable_built_in_dns) {
    defines += [ "ENABLE_BUILT_IN_DNS" ]
  } else {
    sources -= [
      "dns/address_sorter_posix.cc",
      "dns/address_sorter_posix.h",
      "dns/dns_client.cc",
    ]
  }

  if (use_openssl) {
    sources -= [
      "base/nss_memio.c",
      "base/nss_memio.h",
      "cert/ct_log_verifier_nss.cc",
      "cert/ct_objects_extractor_nss.cc",
      "cert/jwk_serializer_nss.cc",
      "cert/scoped_nss_types.h",
      "cert/test_root_certs_nss.cc",
      "cert/x509_util_nss.cc",
      "cert/x509_util_nss.h",
      "ocsp/nss_ocsp.cc",
      "ocsp/nss_ocsp.h",
      "quic/crypto/aead_base_decrypter_nss.cc",
      "quic/crypto/aead_base_encrypter_nss.cc",
      "quic/crypto/aes_128_gcm_12_decrypter_nss.cc",
      "quic/crypto/aes_128_gcm_12_encrypter_nss.cc",
      "quic/crypto/chacha20_poly1305_decrypter_nss.cc",
      "quic/crypto/chacha20_poly1305_encrypter_nss.cc",
      "quic/crypto/channel_id_nss.cc",
      "quic/crypto/p256_key_exchange_nss.cc",
      "socket/nss_ssl_util.cc",
      "socket/nss_ssl_util.h",
      "socket/ssl_client_socket_nss.cc",
      "socket/ssl_client_socket_nss.h",
      "socket/ssl_server_socket_nss.cc",
      "socket/ssl_server_socket_nss.h",
    ]
    if (is_chromeos) {
      sources -= [
        "cert/nss_cert_database_chromeos.cc",
        "cert/nss_cert_database_chromeos.h",
        "cert/nss_profile_filter_chromeos.cc",
        "cert/nss_profile_filter_chromeos.h",
      ]
    }
    if (is_linux) {
      # These are always removed for non-Linux cases below.
      sources -= [
        "base/crypto_module_nss.cc",
        "base/keygen_handler_nss.cc",
        "cert/cert_database_nss.cc",
        "cert/nss_cert_database.cc",
        "cert/nss_cert_database.h",
        "cert/x509_certificate_nss.cc",
        "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
        "third_party/mozilla_security_manager/nsKeygenHandler.h",
        "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
        "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
        "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
        "third_party/mozilla_security_manager/nsPKCS12Blob.h",
      ]
    }
    if (is_ios) {
      # Always removed for !ios below.
      sources -= [
        "cert/cert_verify_proc_nss.cc",
        "cert/cert_verify_proc_nss.h",
      ]
    }
    if (is_win) {
      sources -= [ "cert/sha256_legacy_support_nss_win.cc" ]
    }
  } else {
    sources -= [
      "base/crypto_module_openssl.cc",
      "cert/ct_log_verifier_openssl.cc",
      "cert/ct_objects_extractor_openssl.cc",
      "cert/jwk_serializer_openssl.cc",
      "cert/x509_util_openssl.cc",
      "cert/x509_util_openssl.h",
      "quic/crypto/aead_base_decrypter_openssl.cc",
      "quic/crypto/aead_base_encrypter_openssl.cc",
      "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc",
      "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc",
      "quic/crypto/chacha20_poly1305_decrypter_openssl.cc",
      "quic/crypto/chacha20_poly1305_encrypter_openssl.cc",
      "quic/crypto/channel_id_openssl.cc",
      "quic/crypto/p256_key_exchange_openssl.cc",
      "quic/crypto/scoped_evp_aead_ctx.cc",
      "quic/crypto/scoped_evp_aead_ctx.h",
      "socket/ssl_client_socket_openssl.cc",
      "socket/ssl_client_socket_openssl.h",
      "socket/ssl_server_socket_openssl.cc",
      "socket/ssl_server_socket_openssl.h",
      "socket/ssl_session_cache_openssl.cc",
      "socket/ssl_session_cache_openssl.h",
      "ssl/openssl_platform_key.h",
      "ssl/openssl_ssl_util.cc",
      "ssl/openssl_ssl_util.h",
    ]
    if (is_mac) {
      sources -= [ "ssl/openssl_platform_key_mac.cc" ]
    }
    if (is_win) {
      sources -= [
        "cert/sha256_legacy_support_openssl_win.cc",
        "ssl/openssl_platform_key_win.cc",
      ]
    }
  }

  if (!use_openssl_certs) {
    sources -= [
      "base/keygen_handler_openssl.cc",
      "base/openssl_private_key_store.h",
      "base/openssl_private_key_store_memory.cc",
      "cert/cert_database_openssl.cc",
      "cert/cert_verify_proc_openssl.cc",
      "cert/cert_verify_proc_openssl.h",
      "cert/test_root_certs_openssl.cc",
      "cert/x509_certificate_openssl.cc",
      "ssl/openssl_client_key_store.cc",
      "ssl/openssl_client_key_store.h",
    ]
    if (is_android) {
      sources -= [ "base/openssl_private_key_store_android.cc" ]
    }
  } else if (is_android) {
    # Android doesn't use these even when using OpenSSL.
    sources -= [
      "base/openssl_private_key_store_memory.cc",
      "cert/cert_database_openssl.cc",
      "cert/cert_verify_proc_openssl.cc",
      "cert/test_root_certs_openssl.cc",
    ]
  }

  if (use_glib && !is_chromeos) {
    configs += [ "//build/config/linux:gconf" ]
    deps += [ "//build/config/linux:gio" ]
  }

  if (is_linux) {
    configs += [ "//build/config/linux:libresolv" ]
  } else {
    sources -= [
      "base/crypto_module_nss.cc",
      "base/keygen_handler_nss.cc",
      "cert/cert_database_nss.cc",
      "cert/nss_cert_database.cc",
      "cert/nss_cert_database.h",
      "cert/x509_certificate_nss.cc",
      "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
      "third_party/mozilla_security_manager/nsKeygenHandler.h",
      "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
      "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
      "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
      "third_party/mozilla_security_manager/nsPKCS12Blob.h",
    ]

    if (!is_ios && !use_openssl) {
      # These files are part of the partial implementation of NSS on iOS so
      # keep them in that case.
      sources -= [
        "cert/test_root_certs_nss.cc",
        "ocsp/nss_ocsp.cc",
        "ocsp/nss_ocsp.h",
      ]
    }
  }

  if (!use_nss_certs) {
    sources -= [
      "ssl/client_cert_store_nss.cc",
      "ssl/client_cert_store_nss.h",
    ]
    if (!is_ios) {
      # These files are part of the partial implementation of NSS on iOS so
      # keep them in that case (even though use_nss_certs is not set).
      sources -= [
        "cert/cert_verify_proc_nss.cc",
        "cert/cert_verify_proc_nss.h",
      ]
    }
    if (is_chromeos) {
      # These were already removed on non-ChromeOS.
      sources -= [
        "ssl/client_cert_store_chromeos.cc",
        "ssl/client_cert_store_chromeos.h",
      ]
    }
  }

  if (!enable_websockets) {
    sources -= [
      "websockets/websocket_basic_handshake_stream.cc",
      "websockets/websocket_basic_handshake_stream.h",
      "websockets/websocket_basic_stream.cc",
      "websockets/websocket_basic_stream.h",
      "websockets/websocket_channel.cc",
      "websockets/websocket_channel.h",
      "websockets/websocket_deflate_predictor.h",
      "websockets/websocket_deflate_predictor_impl.cc",
      "websockets/websocket_deflate_predictor_impl.h",
      "websockets/websocket_deflate_stream.cc",
      "websockets/websocket_deflate_stream.h",
      "websockets/websocket_deflater.cc",
      "websockets/websocket_deflater.h",
      "websockets/websocket_errors.cc",
      "websockets/websocket_errors.h",
      "websockets/websocket_extension.cc",
      "websockets/websocket_extension.h",
      "websockets/websocket_extension_parser.cc",
      "websockets/websocket_extension_parser.h",
      "websockets/websocket_frame.cc",
      "websockets/websocket_frame.h",
      "websockets/websocket_frame_parser.cc",
      "websockets/websocket_frame_parser.h",
      "websockets/websocket_handshake_constants.cc",
      "websockets/websocket_handshake_constants.h",
      "websockets/websocket_handshake_challenge.cc",
      "websockets/websocket_handshake_challenge.h",
      "websockets/websocket_handshake_request_info.cc",
      "websockets/websocket_handshake_request_info.h",
      "websockets/websocket_handshake_response_info.cc",
      "websockets/websocket_handshake_response_info.h",
      "websockets/websocket_handshake_stream_base.h",
      "websockets/websocket_handshake_stream_create_helper.cc",
      "websockets/websocket_handshake_stream_create_helper.h",
      "websockets/websocket_inflater.cc",
      "websockets/websocket_inflater.h",
      "websockets/websocket_mux.h",
      "websockets/websocket_stream.cc",
      "websockets/websocket_stream.h",
    ]
  }

  if (!enable_mdns) {
    sources -= [
      "dns/mdns_cache.cc",
      "dns/mdns_cache.h",
      "dns/mdns_client.cc",
      "dns/mdns_client.h",
      "dns/mdns_client_impl.cc",
      "dns/mdns_client_impl.h",
      "dns/record_parsed.cc",
      "dns/record_parsed.h",
      "dns/record_rdata.cc",
      "dns/record_rdata.h",
    ]
  }

  if (is_win) {
    sources -= [
      "http/http_auth_handler_ntlm_portable.cc",
      "socket/socket_libevent.cc",
      "socket/socket_libevent.h",
      "socket/tcp_socket_libevent.cc",
      "socket/tcp_socket_libevent.h",
      "udp/udp_socket_libevent.cc",
      "udp/udp_socket_libevent.h",
    ]
  } else {  # !is_win
    sources -= [
      "base/winsock_init.cc",
      "base/winsock_init.h",
      "base/winsock_util.cc",
      "base/winsock_util.h",
      "proxy/proxy_resolver_winhttp.cc",
      "proxy/proxy_resolver_winhttp.h",
    ]
  }

  if (is_mac) {
    libs = [
      "Foundation.framework",
      "Security.framework",
      "SystemConfiguration.framework",
      "resolv",
    ]
  }

  if (is_ios) {
    # Add back some sources that were otherwise filtered out. iOS additionally
    # doesn't set USE_NSS but needs some of the files.
    set_sources_assignment_filter([])
    sources += [
      "base/net_util_mac.cc",
      "base/net_util_mac.h",
      "base/network_change_notifier_mac.cc",
      "base/network_config_watcher_mac.cc",
      "base/platform_mime_util_mac.mm",
      "cert/cert_verify_proc_nss.cc",
      "cert/cert_verify_proc_nss.h",
      "cert/test_root_certs_nss.cc",
      "cert/x509_util_nss.cc",
      "cert/x509_util_nss.h",
      "proxy/proxy_resolver_mac.cc",
      "proxy/proxy_server_mac.cc",
      "ocsp/nss_ocsp.cc",
      "ocsp/nss_ocsp.h",
    ]
    set_sources_assignment_filter(sources_assignment_filter)

    sources -= [ "disk_cache/blockfile/file_posix.cc" ]
    libs = [
      "CFNetwork.framework",
      "MobileCoreServices.framework",
      "Security.framework",
      "SystemConfiguration.framework",
      "resolv",
    ]
  }

  if (is_ios || is_mac) {
    sources += gypi_values.net_base_mac_ios_sources
  }

  if (is_android) {
    # Add some Linux sources that were excluded by the filter, but which
    # are needed.
    set_sources_assignment_filter([])
    sources += [
      "base/platform_mime_util_linux.cc",
      "base/address_tracker_linux.cc",
      "base/address_tracker_linux.h",
      "base/net_util_linux.cc",
      "base/net_util_linux.h",
    ]
    set_sources_assignment_filter(sources_assignment_filter)

    if (!is_android_webview_build) {
      deps += [ ":net_jni_headers" ]
    }
  }

  if (use_icu_alternatives_on_android) {
    deps -= [
      "//base:i18n",
      "//third_party/icu",
    ]
    sources -= [
      "base/filename_util_icu.cc",
      "base/net_string_util_icu.cc",
      "base/net_util_icu.cc",
    ]
    sources += [
      "base/net_string_util_icu_alternatives_android.cc",
      "base/net_string_util_icu_alternatives_android.h",
    ]
  }
}

grit("net_resources") {
  source = "base/net_resources.grd"
  use_qualified_include = true
  outputs = [
    "grit/net_resources.h",
    "net_resources.pak",
    "net_resources.rc",
  ]
}

if (false) {

static_library("extras") {
  sources = gypi_values.net_extras_sources
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  deps = [
    ":net",
    "//sql:sql",
  ]
}

} # if (false)

static_library("http_server") {
  sources = [
    "server/http_connection.cc",
    "server/http_connection.h",
    "server/http_server.cc",
    "server/http_server.h",
    "server/http_server_request_info.cc",
    "server/http_server_request_info.h",
    "server/http_server_response_info.cc",
    "server/http_server_response_info.h",
    "server/web_socket.cc",
    "server/web_socket.h",
    "server/web_socket_encoder.cc",
    "server/web_socket_encoder.h",
  ]
  configs += [
    "//build/config/compiler:wexit_time_destructors",
    ":net_win_size_truncation",
  ]
  deps = [
    ":net",
    "//base",
  ]
}

executable("dump_cache") {
  testonly = true
  sources = [
    "tools/dump_cache/cache_dumper.cc",
    "tools/dump_cache/cache_dumper.h",
    "tools/dump_cache/dump_cache.cc",
    "tools/dump_cache/dump_files.cc",
    "tools/dump_cache/dump_files.h",
    "tools/dump_cache/simple_cache_dumper.cc",
    "tools/dump_cache/simple_cache_dumper.h",
    "tools/dump_cache/url_to_filename_encoder.cc",
    "tools/dump_cache/url_to_filename_encoder.h",
    "tools/dump_cache/url_utilities.h",
    "tools/dump_cache/url_utilities.cc",
  ]

  configs += [ ":net_win_size_truncation" ]

  deps = [
    "//base",
    ":net",
    ":test_support",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "base/captured_net_log_entry.cc",
    "base/captured_net_log_entry.h",
    "base/capturing_net_log.cc",
    "base/capturing_net_log.h",
    "base/capturing_net_log_observer.cc",
    "base/capturing_net_log_observer.h",
    "base/load_timing_info_test_util.cc",
    "base/load_timing_info_test_util.h",
    "base/mock_file_stream.cc",
    "base/mock_file_stream.h",
    "base/test_completion_callback.cc",
    "base/test_completion_callback.h",
    "base/test_data_directory.cc",
    "base/test_data_directory.h",
    "cert/mock_cert_verifier.cc",
    "cert/mock_cert_verifier.h",
    "cookies/cookie_monster_store_test.cc",
    "cookies/cookie_monster_store_test.h",
    "cookies/cookie_store_test_callbacks.cc",
    "cookies/cookie_store_test_callbacks.h",
    "cookies/cookie_store_test_helpers.cc",
    "cookies/cookie_store_test_helpers.h",
    "disk_cache/disk_cache_test_base.cc",
    "disk_cache/disk_cache_test_base.h",
    "disk_cache/disk_cache_test_util.cc",
    "disk_cache/disk_cache_test_util.h",
    "dns/dns_test_util.cc",
    "dns/dns_test_util.h",
    "dns/mock_host_resolver.cc",
    "dns/mock_host_resolver.h",
    "dns/mock_mdns_socket_factory.cc",
    "dns/mock_mdns_socket_factory.h",
    "http/http_transaction_test_util.cc",
    "http/http_transaction_test_util.h",
    "proxy/mock_proxy_resolver.cc",
    "proxy/mock_proxy_resolver.h",
    "proxy/mock_proxy_script_fetcher.cc",
    "proxy/mock_proxy_script_fetcher.h",
    "proxy/proxy_config_service_common_unittest.cc",
    "proxy/proxy_config_service_common_unittest.h",
    "socket/socket_test_util.cc",
    "socket/socket_test_util.h",
    "test/cert_test_util.cc",
    "test/cert_test_util.h",
    "test/cert_test_util_nss.cc",
    "test/ct_test_util.cc",
    "test/ct_test_util.h",
    "test/embedded_test_server/embedded_test_server.cc",
    "test/embedded_test_server/embedded_test_server.h",
    "test/embedded_test_server/http_connection.cc",
    "test/embedded_test_server/http_connection.h",
    "test/embedded_test_server/http_request.cc",
    "test/embedded_test_server/http_request.h",
    "test/embedded_test_server/http_response.cc",
    "test/embedded_test_server/http_response.h",
    "test/net_test_suite.cc",
    "test/net_test_suite.h",
    "test/python_utils.cc",
    "test/python_utils.h",
    "test/spawned_test_server/base_test_server.cc",
    "test/spawned_test_server/base_test_server.h",
    "test/spawned_test_server/local_test_server_posix.cc",
    "test/spawned_test_server/local_test_server_win.cc",
    "test/spawned_test_server/local_test_server.cc",
    "test/spawned_test_server/local_test_server.h",
    "test/spawned_test_server/remote_test_server.cc",
    "test/spawned_test_server/remote_test_server.h",
    "test/spawned_test_server/spawned_test_server.h",
    "test/spawned_test_server/spawner_communicator.cc",
    "test/spawned_test_server/spawner_communicator.h",
    "test/url_request/url_request_failed_job.cc",
    "test/url_request/url_request_failed_job.h",
    "test/url_request/url_request_mock_data_job.cc",
    "test/url_request/url_request_mock_data_job.h",
    "test/url_request/url_request_mock_http_job.cc",
    "test/url_request/url_request_mock_http_job.h",
    "url_request/test_url_fetcher_factory.cc",
    "url_request/test_url_fetcher_factory.h",
    "url_request/test_url_request_interceptor.cc",
    "url_request/test_url_request_interceptor.h",
    "url_request/url_request_test_util.cc",
    "url_request/url_request_test_util.h",
  ]

  configs += [ ":net_win_size_truncation" ]

  public_deps = [
    "//base",
    "//base/test:test_support",
    "//crypto",
    "//net",
    "//net/tools/tld_cleanup",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]

  if (!use_openssl && (use_nss_certs || is_ios)) {
    public_deps += [ "//crypto:platform" ]
  }

  if (!is_android) {
    sources -= [
      "test/spawned_test_server/remote_test_server.cc",
      "test/spawned_test_server/remote_test_server.h",
      "test/spawned_test_server/spawner_communicator.cc",
      "test/spawned_test_server/spawner_communicator.h",
    ]
  }

  if (use_v8_in_net) {
    public_deps += [ ":net_with_v8" ]
  }

  if (!enable_mdns) {
    sources -= [
      "dns/mock_mdns_socket_factory.cc",
      "dns/mock_mdns_socket_factory.h",
    ]
  }

  if (!use_nss_certs) {
    sources -= [ "test/cert_test_util_nss.cc" ]
  }
}

source_set("balsa") {
  sources = [
    "tools/balsa/balsa_enums.h",
    "tools/balsa/balsa_frame.cc",
    "tools/balsa/balsa_frame.h",
    "tools/balsa/balsa_headers.cc",
    "tools/balsa/balsa_headers.h",
    "tools/balsa/balsa_headers_token_utils.cc",
    "tools/balsa/balsa_headers_token_utils.h",
    "tools/balsa/balsa_visitor_interface.h",
    "tools/balsa/http_message_constants.cc",
    "tools/balsa/http_message_constants.h",
    "tools/balsa/noop_balsa_visitor.h",
    "tools/balsa/simple_buffer.cc",
    "tools/balsa/simple_buffer.h",
    "tools/balsa/split.cc",
    "tools/balsa/split.h",
    "tools/balsa/string_piece_utils.h",
    "tools/quic/spdy_utils.cc",
    "tools/quic/spdy_utils.h",
  ]
  deps = [
    ":net",
    "//base",
    "//url",
  ]
}

if (use_v8_in_net) {
  component("net_with_v8") {
    sources = [
      "proxy/proxy_resolver_v8.cc",
      "proxy/proxy_resolver_v8.h",
      "proxy/proxy_resolver_v8_tracing.cc",
      "proxy/proxy_resolver_v8_tracing.h",
      "proxy/proxy_service_v8.cc",
      "proxy/proxy_service_v8.h",
    ]

    defines = [ "NET_IMPLEMENTATION" ]
    configs += [
      ":net_win_size_truncation",
      "//build/config/compiler:wexit_time_destructors",
    ]

    public_deps = [
      ":net",
    ]
    deps = [
      "//base",
      "//gin",
      "//url",
      "//v8",
    ]
  }
}

if (!is_ios && !is_android) {
  executable("crash_cache") {
    testonly = true
    sources = [
      "tools/crash_cache/crash_cache.cc",
    ]
    configs += [ ":net_win_size_truncation" ]
    deps = [
      ":net",
      ":test_support",
      "//base",
    ]
  }

  executable("crl_set_dump") {
    testonly = true
    sources = [
      "tools/crl_set_dump/crl_set_dump.cc",
    ]
    configs += [ ":net_win_size_truncation" ]
    deps = [
      ":net",
      "//base",
    ]
  }

  executable("dns_fuzz_stub") {
    testonly = true
    sources = [
      "tools/dns_fuzz_stub/dns_fuzz_stub.cc",
    ]
    configs += [ ":net_win_size_truncation" ]
    deps = [
      ":net",
      "//base",
    ]
  }

  executable("gdig") {
    testonly = true
    sources = [
      "tools/gdig/file_net_log.cc",
      "tools/gdig/gdig.cc",
    ]
    deps = [
      ":net",
      "//base",
    ]
  }

  executable("get_server_time") {
    testonly = true
    sources = [
      "tools/get_server_time/get_server_time.cc",
    ]
    configs += [ ":net_win_size_truncation" ]
    deps = [
      ":net",
      "//base",
      "//base:i18n",
      "//url",
    ]
  }

  if (use_v8_in_net) {
    executable("net_watcher") {
      testonly = true
      sources = [
        "tools/net_watcher/net_watcher.cc",
      ]
      deps = [
        ":net",
        ":net_with_v8",
        "//base",
      ]

      if (is_desktop_linux) {
        configs += [
          "//build/config/linux:gconf",
          "//build/config/linux:glib",
        ]
        deps += [ "//build/config/linux:gio" ]
      }
    }
  }

  executable("run_testserver") {
    testonly = true
    sources = [
      "tools/testserver/run_testserver.cc",
    ]
    deps = [
      ":net",  # TODO(brettw) bug 363749: this shouldn't be necessary. It's not
               # in the GYP build, and can be removed when the bug is fixed.
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }

  executable("stress_cache") {
    testonly = true
    sources = [
      "disk_cache/blockfile/stress_cache.cc",
    ]
    configs += [ ":net_win_size_truncation" ]
    deps = [
      ":net",
      ":test_support",
      "//base",
    ]
  }

  executable("tld_cleanup") {
    sources = [
      "tools/tld_cleanup/tld_cleanup.cc",
    ]
    configs += [ ":net_win_size_truncation" ]
    deps = [
      "//base",
      "//base:i18n",
      "//net/tools/tld_cleanup",
    ]
  }
}

if (is_linux) {
  static_library("epoll_server") {
    sources = [
      "tools/epoll_server/epoll_server.cc",
      "tools/epoll_server/epoll_server.h",
    ]
    deps = [
      ":net",
      "//base",
    ]
  }

  static_library("flip_in_mem_edsm_server_base") {
    testonly = true
    sources = [
      "tools/dump_cache/url_to_filename_encoder.cc",
      "tools/dump_cache/url_to_filename_encoder.h",
      "tools/dump_cache/url_utilities.h",
      "tools/dump_cache/url_utilities.cc",
      "tools/flip_server/acceptor_thread.h",
      "tools/flip_server/acceptor_thread.cc",
      "tools/flip_server/create_listener.cc",
      "tools/flip_server/create_listener.h",
      "tools/flip_server/constants.h",
      "tools/flip_server/flip_config.cc",
      "tools/flip_server/flip_config.h",
      "tools/flip_server/http_interface.cc",
      "tools/flip_server/http_interface.h",
      "tools/flip_server/loadtime_measurement.h",
      "tools/flip_server/mem_cache.h",
      "tools/flip_server/mem_cache.cc",
      "tools/flip_server/output_ordering.cc",
      "tools/flip_server/output_ordering.h",
      "tools/flip_server/ring_buffer.cc",
      "tools/flip_server/ring_buffer.h",
      "tools/flip_server/sm_connection.cc",
      "tools/flip_server/sm_connection.h",
      "tools/flip_server/sm_interface.h",
      "tools/flip_server/spdy_ssl.cc",
      "tools/flip_server/spdy_ssl.h",
      "tools/flip_server/spdy_interface.cc",
      "tools/flip_server/spdy_interface.h",
      "tools/flip_server/spdy_util.cc",
      "tools/flip_server/spdy_util.h",
      "tools/flip_server/streamer_interface.cc",
      "tools/flip_server/streamer_interface.h",
    ]
    deps = [
      ":balsa",
      ":epoll_server",
      ":net",
      "//base",
      "//third_party/boringssl",
    ]
  }

  executable("flip_in_mem_edsm_server_unittests") {
    testonly = true
    sources = [
      "tools/flip_server/flip_test_utils.cc",
      "tools/flip_server/flip_test_utils.h",
      "tools/flip_server/http_interface_test.cc",
      "tools/flip_server/mem_cache_test.cc",
      "tools/flip_server/run_all_tests.cc",
      "tools/flip_server/spdy_interface_test.cc",
    ]
    deps = [
      ":flip_in_mem_edsm_server_base",
      ":net",
      ":test_support",
      "//testing/gtest",
      "//testing/gmock",
      "//third_party/boringssl",
    ]
  }

  executable("flip_in_mem_edsm_server") {
    testonly = true
    sources = [
      "tools/flip_server/flip_in_mem_edsm_server.cc",
    ]
    deps = [
      ":flip_in_mem_edsm_server_base",
      ":net",
      "//base",
    ]
  }

  source_set("quic_base") {
    sources = [
      "tools/quic/quic_client.cc",
      "tools/quic/quic_client.h",
      "tools/quic/quic_client_session.cc",
      "tools/quic/quic_client_session.h",
      "tools/quic/quic_default_packet_writer.cc",
      "tools/quic/quic_default_packet_writer.h",
      "tools/quic/quic_dispatcher.h",
      "tools/quic/quic_dispatcher.cc",
      "tools/quic/quic_epoll_clock.cc",
      "tools/quic/quic_epoll_clock.h",
      "tools/quic/quic_epoll_connection_helper.cc",
      "tools/quic/quic_epoll_connection_helper.h",
      "tools/quic/quic_in_memory_cache.cc",
      "tools/quic/quic_in_memory_cache.h",
      "tools/quic/quic_packet_writer_wrapper.cc",
      "tools/quic/quic_packet_writer_wrapper.h",
      "tools/quic/quic_per_connection_packet_writer.cc",
      "tools/quic/quic_per_connection_packet_writer.h",
      "tools/quic/quic_server.cc",
      "tools/quic/quic_server.h",
      "tools/quic/quic_server_session.cc",
      "tools/quic/quic_server_session.h",
      "tools/quic/quic_socket_utils.cc",
      "tools/quic/quic_socket_utils.h",
      "tools/quic/quic_spdy_client_stream.cc",
      "tools/quic/quic_spdy_client_stream.h",
      "tools/quic/quic_spdy_server_stream.cc",
      "tools/quic/quic_spdy_server_stream.h",
      "tools/quic/quic_time_wait_list_manager.h",
      "tools/quic/quic_time_wait_list_manager.cc",
    ]
    deps = [
      ":balsa",
      ":epoll_server",
      ":net",
      "//base",
      "//base/third_party/dynamic_annotations",
      "//crypto",
      "//third_party/boringssl",
      "//url",
    ]
  }

  executable("quic_client") {
    sources = [
      "tools/quic/quic_client_bin.cc",
    ]
    deps = [
      ":quic_base",
      ":net",
      "//base",
      "//third_party/boringssl",
    ]
  }
}

if (is_android) {
  generate_jni("net_jni_headers") {
    sources = [
      "android/java/src/org/chromium/net/AndroidCertVerifyResult.java",
      "android/java/src/org/chromium/net/AndroidKeyStore.java",
      "android/java/src/org/chromium/net/AndroidNetworkLibrary.java",
      "android/java/src/org/chromium/net/AndroidPrivateKey.java",
      "android/java/src/org/chromium/net/GURLUtils.java",
      "android/java/src/org/chromium/net/NetworkChangeNotifier.java",
      "android/java/src/org/chromium/net/ProxyChangeListener.java",
      "android/java/src/org/chromium/net/X509Util.java",
    ]
    jni_package = "net"
  }
  generate_jni("net_test_jni_headers") {
    sources = [
      "android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java",
    ]
    jni_package = "net"
  }
}

if (is_android || is_linux) {
  executable("disk_cache_memory_test") {
    testonly = true
    sources = [
      "tools/disk_cache_memory_test/disk_cache_memory_test.cc",
    ]
    deps = [
      ":net",
      "//base",
    ]
  }
}

# TODO(GYP) make this compile on Android, we need some native test deps done.
# TODO(GYP) Also doesn't work on Windows; dependency on boringssl is wrong.
# TODO(GYP) Also doesn't work on Mac, need to figure out why not.
if (!is_android && !is_win && !is_mac) {
  source_set("quic_tools") {
    sources = [
      "quic/quic_dispatcher.cc",
      "quic/quic_dispatcher.h",
      "quic/quic_in_memory_cache.cc",
      "quic/quic_in_memory_cache.h",
      "quic/quic_per_connection_packet_writer.cc",
      "quic/quic_per_connection_packet_writer.h",
      "quic/quic_server.cc",
      "quic/quic_server.h",
      "quic/quic_server_packet_writer.cc",
      "quic/quic_server_packet_writer.h",
      "quic/quic_server_session.cc",
      "quic/quic_server_session.h",
      "quic/quic_spdy_server_stream.cc",
      "quic/quic_spdy_server_stream.h",
      "quic/quic_time_wait_list_manager.cc",
      "quic/quic_time_wait_list_manager.h",
    ]
    deps = [
      ":net",
      "//base",
      "//base/third_party/dynamic_annotations",
      "//url",
    ]
  }

  test("net_unittests") {
    sources = gypi_values.net_test_sources

    sources -= [
      "extras/sqlite/sqlite_channel_id_store_unittest.cc",
    ]

    configs += [ ":net_win_size_truncation" ]
    defines = []

    deps = [
      ":http_server",
      ":net",
      ":quic_tools",
      ":test_support",
      "//base",
      "//base:i18n",
      "//base:prefs_test_support",
      "//base/allocator",
      "//base/third_party/dynamic_annotations",
      "//crypto",
      "//crypto:platform",
      "//crypto:test_support",
      "//net/base/registry_controlled_domains",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/zlib",
      "//url",
    ]

    if (is_linux) {
      sources += gypi_values.net_linux_test_sources
      deps += [
        ":balsa",
        ":epoll_server",
        ":flip_in_mem_edsm_server_base",
        ":quic_base",
      ]
    }

    if (is_mac || is_ios) {
      sources += gypi_values.net_base_test_mac_ios_sources
    }

    if (is_chromeos) {
      sources -= [ "proxy/proxy_config_service_linux_unittest.cc" ]
    }

    if (is_android) {
      sources -= [
        # See bug http://crbug.com/344533.
        "disk_cache/blockfile/index_table_v3_unittest.cc",

        # No res_ninit() et al on Android, so this doesn't make a lot of
        # sense.
        "dns/dns_config_service_posix_unittest.cc",
      ]
      deps += [
        ":net_javatests",  # FIXME(brettw)
        ":net_test_jni_headers",
      ]
    }

    if (v8_use_external_startup_data) {
      deps += [ "//gin" ]
    }

    if (!use_nss_certs) {
      sources -= [ "ssl/client_cert_store_nss_unittest.cc" ]
      if (is_chromeos) {  # Already removed for all non-ChromeOS builds.
        sources -= [ "ssl/client_cert_store_chromeos_unittest.cc" ]
      }
    }

    if (use_openssl) {
      # When building for OpenSSL, we need to exclude NSS specific tests
      # or functionality not supported by OpenSSL yet.
      # TODO(bulach): Add equivalent tests when the underlying
      #               functionality is ported to OpenSSL.
      sources -= [
        "cert/nss_cert_database_unittest.cc",
        "cert/x509_util_nss_unittest.cc",
        "quic/test_tools/crypto_test_utils_nss.cc",
      ]
      if (is_chromeos) {
        # These were already removed in the non-ChromeOS case.
        sources -= [
          "cert/nss_cert_database_chromeos_unittest.cc",
          "cert/nss_profile_filter_chromeos_unittest.cc",
        ]
      }
    } else {
      sources -= [
        "cert/x509_util_openssl_unittest.cc",
        "quic/test_tools/crypto_test_utils_openssl.cc",
        "socket/ssl_client_socket_openssl_unittest.cc",
        "socket/ssl_session_cache_openssl_unittest.cc",
      ]
      if (!is_desktop_linux && !is_chromeos) {
        sources -= [ "cert/nss_cert_database_unittest.cc" ]
      }
    }

    if (use_kerberos) {
      defines += [ "USE_KERBEROS" ]
    } else {
      sources -= [
        "http/http_auth_gssapi_posix_unittest.cc",
        "http/http_auth_handler_negotiate_unittest.cc",
        "http/mock_gssapi_library_posix.cc",
        "http/mock_gssapi_library_posix.h",
      ]
    }

    if (use_openssl || (!is_desktop_linux && !is_chromeos && !is_ios)) {
      # Only include this test when on Posix and using NSS for
      # cert verification or on iOS (which also uses NSS for certs).
      sources -= [ "ocsp/nss_ocsp_unittest.cc" ]
    }

    if (!use_openssl_certs) {
      sources -= [ "ssl/openssl_client_key_store_unittest.cc" ]
    }

    if (!enable_websockets) {
      sources -= [
        "server/http_connection_unittest.cc",
        "server/http_server_response_info_unittest.cc",
        "server/http_server_unittest.cc",
        "server/web_socket_encoder_unittest.cc",
        "websockets/websocket_basic_stream_test.cc",
        "websockets/websocket_channel_test.cc",
        "websockets/websocket_deflate_predictor_impl_test.cc",
        "websockets/websocket_deflate_stream_test.cc",
        "websockets/websocket_deflater_test.cc",
        "websockets/websocket_errors_test.cc",
        "websockets/websocket_extension_parser_test.cc",
        "websockets/websocket_frame_parser_test.cc",
        "websockets/websocket_frame_test.cc",
        "websockets/websocket_handshake_challenge_test.cc",
        "websockets/websocket_handshake_stream_create_helper_test.cc",
        "websockets/websocket_inflater_test.cc",
        "websockets/websocket_stream_test.cc",
        "websockets/websocket_test_util.cc",
        "websockets/websocket_test_util.h",
      ]
      deps -= [ ":http_server" ]
    }

    if (disable_file_support) {
      sources -= [
        "base/directory_lister_unittest.cc",
        "url_request/url_request_file_job_unittest.cc",
      ]
    }

    if (disable_ftp_support) {
      sources -= [
        "ftp/ftp_auth_cache_unittest.cc",
        "ftp/ftp_ctrl_response_buffer_unittest.cc",
        "ftp/ftp_directory_listing_parser_ls_unittest.cc",
        "ftp/ftp_directory_listing_parser_netware_unittest.cc",
        "ftp/ftp_directory_listing_parser_os2_unittest.cc",
        "ftp/ftp_directory_listing_parser_unittest.cc",
        "ftp/ftp_directory_listing_parser_unittest.h",
        "ftp/ftp_directory_listing_parser_vms_unittest.cc",
        "ftp/ftp_directory_listing_parser_windows_unittest.cc",
        "ftp/ftp_network_transaction_unittest.cc",
        "ftp/ftp_util_unittest.cc",
        "url_request/url_request_ftp_job_unittest.cc",
      ]
    }

    if (!enable_built_in_dns) {
      sources -= [
        "dns/address_sorter_posix_unittest.cc",
        "dns/address_sorter_unittest.cc",
      ]
    }

    # Always need use_v8_in_net to be 1 to run on Android, so just remove
    # net_unittest's dependency on v8 when using icu alternatives instead of
    # setting use_v8_in_net to 0.
    if (use_v8_in_net && !use_icu_alternatives_on_android) {
      deps += [ ":net_with_v8" ]
    } else {
      sources -= [
        "proxy/proxy_resolver_v8_unittest.cc",
        "proxy/proxy_resolver_v8_tracing_unittest.cc",
      ]
    }

    if (!enable_mdns) {
      sources -= [
        "dns/mdns_cache_unittest.cc",
        "dns/mdns_client_unittest.cc",
        "dns/record_parsed_unittest.cc",
        "dns/record_rdata_unittest.cc",
      ]
    }

    if (is_ios) {
      # TODO(GYP)
      #  'actions': [
      #    {
      #      'action_name': 'copy_test_data',
      #      'variables': {
      #        'test_data_files': [
      #          'data/ssl/certificates/',
      #          'data/test.html',
      #          'data/url_request_unittest/',
      #        ],
      #        'test_data_prefix': 'net',
      #      },
      #      'includes': [ '../build/copy_test_data_ios.gypi' ],
      #    },
      #  ],
      sources -= [
        # TODO(droger): The following tests are disabled because the
        # implementation is missing or incomplete.
        # KeygenHandler::GenKeyAndSignChallenge() is not ported to iOS.
        "base/keygen_handler_unittest.cc",
        "disk_cache/backend_unittest.cc",
        "disk_cache/blockfile/block_files_unittest.cc",

        # Need to read input data files.
        "filter/gzip_filter_unittest.cc",
        "socket/ssl_server_socket_unittest.cc",
        "spdy/fuzzing/hpack_fuzz_util_test.cc",

        # Need TestServer.
        "proxy/proxy_script_fetcher_impl_unittest.cc",
        "socket/ssl_client_socket_unittest.cc",
        "url_request/url_fetcher_impl_unittest.cc",
        "url_request/url_request_context_builder_unittest.cc",

        # Needs GetAppOutput().
        "test/python_utils_unittest.cc",

        # The following tests are disabled because they don't apply to
        # iOS.
        # OS is not "linux" or "freebsd" or "openbsd".
        "socket/unix_domain_client_socket_posix_unittest.cc",
        "socket/unix_domain_listen_socket_posix_unittest.cc",
        "socket/unix_domain_server_socket_posix_unittest.cc",

        # See bug http://crbug.com/344533.
        "disk_cache/blockfile/index_table_v3_unittest.cc",
      ]
    }

    if (is_android) {
      sources -= [ "dns/dns_config_service_posix_unittest.cc" ]

      # TODO(GYP)
      # # TODO(mmenke):  This depends on test_support_base, which depends on
      # #                icu.  Figure out a way to remove that dependency.
      # 'dependencies': [
      #   '../testing/android/native_test.gyp:native_test_native_code',
      # ]

      set_sources_assignment_filter([])
      sources += [ "base/address_tracker_linux_unittest.cc" ]
      set_sources_assignment_filter(sources_assignment_filter)
    }

    if (use_icu_alternatives_on_android) {
      sources -= [
        "base/filename_util_unittest.cc",
        "base/net_util_icu_unittest.cc",
      ]
      deps -= [ "//base:i18n" ]
    }
  }

  executable("quic_server") {
    sources = [
      "quic/quic_server_bin.cc",
    ]
    deps = [
      ":quic_tools",
      ":net",
      "//base",
      "//third_party/boringssl",
    ]
  }
}  # !is_android && !is_win && !is_mac
