# 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")
import("//testing/test.gni")
import("//third_party/icu/config.gni")
import("//third_party/protobuf/proto_library.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 && current_cpu != "x86"

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

# NOTE(vtl): This was "moved" from //build/config/features.gni.
enable_mdns = is_linux

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

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

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
  public_configs = [ ":net_config" ]
  include_dirs = []

  public_deps = [
    ":net_quic_proto",
    "//crypto",
    "//crypto:platform",
    "//url",
  ]
  deps = [
    ":net_resources",
    "//base",
    "//base:prefs",
    "//base/third_party/dynamic_annotations",
    "//net/base/registry_controlled_domains",
    "//sdch",
    "//third_party/protobuf:protobuf_lite",
    "//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.cc",
      "http/http_auth_handler_negotiate.h",
    ]
  }

  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/file_protocol_handler.cc",
      "url_request/file_protocol_handler.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",
    ]
  }

  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/x509_util_nss.cc",
      "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_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" ]
    }
    if (!use_nss_certs && !is_ios) {
      sources -= [ "cert/x509_util_nss.h" ]
    }
  } else {
    sources -= [
      "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",
      "ssl/openssl_platform_key.h",
      "ssl/openssl_platform_key_nss.cc",
      "ssl/openssl_ssl_util.cc",
      "ssl/openssl_ssl_util.h",
      "ssl/ssl_client_session_cache_openssl.cc",
      "ssl/ssl_client_session_cache_openssl.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/crypto_module_openssl.cc",
      "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 (is_linux) {
    configs += [ "//build/config/linux:libresolv" ]
  }

  if (!use_nss_certs) {
    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",
      "ssl/client_cert_store_nss.cc",
      "ssl/client_cert_store_nss.h",
      "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) {
      # 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",
        "cert/test_root_certs_nss.cc",
        "cert/x509_util_nss_certs.cc",
        "cert_net/nss_ocsp.cc",
        "cert_net/nss_ocsp.h",
      ]
    }
    if (is_chromeos) {
      # These were already removed on non-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",
        "ssl/client_cert_store_chromeos.cc",
        "ssl/client_cert_store_chromeos.h",
      ]
    }
    if (use_openssl) {
      sources -= [ "ssl/openssl_platform_key_nss.cc" ]
    }
  } else if (use_openssl) {
    # client_cert_store_nss.c requires NSS_CmpCertChainWCANames from NSS's
    # libssl, but our bundled copy is not built in OpenSSL ports. Pull that file
    # in directly.
    sources += [ "third_party/nss/ssl/cmpcert.c" ]
  }

  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_challenge.cc",
      "websockets/websocket_handshake_challenge.h",
      "websockets/websocket_handshake_constants.cc",
      "websockets/websocket_handshake_constants.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",
    ]
  }

  # Was "!enable_mdns".
  if (!is_linux) {
    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 needs some Mac
    # 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",
      "proxy/proxy_resolver_mac.cc",
      "proxy/proxy_server_mac.cc",
    ]
    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/address_tracker_linux.cc",
      "base/address_tracker_linux.h",
      "base/net_util_linux.cc",
      "base/net_util_linux.h",
      "base/platform_mime_util_linux.cc",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
    deps += [ ":net_jni_headers" ]
  }

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

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

proto_library("net_quic_proto") {
  visibility = [ "//net" ]  # Part of the net component.

  sources = [
    "quic/proto/cached_network_parameters.proto",
    "quic/proto/source_address_token.proto",
  ]
  cc_generator_options = "dllexport_decl=NET_EXPORT_PRIVATE:"
  cc_include = "net/base/net_export.h"

  defines = [ "NET_IMPLEMENTATION" ]

  extra_configs = [ "//build/config/compiler:wexit_time_destructors" ]
}

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:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
  ]
  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.cc",
    "tools/dump_cache/url_utilities.h",
  ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

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

source_set("test_support") {
  testonly = true
  sources = [
    "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",
    "log/test_net_log.cc",
    "log/test_net_log.h",
    "log/test_net_log_entry.cc",
    "log/test_net_log_entry.h",
    "log/test_net_log_util.cc",
    "log/test_net_log_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/event_waiter.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.cc",
    "test/spawned_test_server/local_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/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_slow_download_job.cc",
    "test/url_request/url_request_slow_download_job.h",
    "url_request/test_url_fetcher_factory.cc",
    "url_request/test_url_fetcher_factory.h",
    "url_request/url_request_test_util.cc",
    "url_request/url_request_test_util.h",
  ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

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

  if (!is_ios) {
    public_deps += [ "//third_party/protobuf:py_proto" ]
  }

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

  if (!disable_file_support) {
    sources += [
      "test/url_request/url_request_mock_http_job.cc",
      "test/url_request/url_request_mock_http_job.h",
      "url_request/test_url_request_interceptor.cc",
      "url_request/test_url_request_interceptor.h",
    ]
  }
}

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_balsa_utils.cc",
    "tools/quic/spdy_balsa_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 += [
      "//build/config/compiler:no_size_t_to_int_warning",
      "//build/config/compiler:wexit_time_destructors",
    ]

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

if (use_v8_in_net && !is_android) {
  source_set("net_browser_services") {
    sources = [
      "dns/mojo_host_resolver_impl.cc",
      "dns/mojo_host_resolver_impl.h",
      "proxy/in_process_mojo_proxy_resolver_factory.cc",
      "proxy/in_process_mojo_proxy_resolver_factory.h",
      "proxy/mojo_proxy_resolver_factory.h",
      "proxy/proxy_resolver_mojo.cc",
      "proxy/proxy_resolver_mojo.h",
      "proxy/proxy_service_mojo.cc",
      "proxy/proxy_service_mojo.h",
    ]

    public_deps = [
      ":mojo_type_converters",
      ":net",
      "//base",
      "//mojo/common",
      "//net/interfaces",
      "//third_party/mojo/src/mojo/public/cpp/bindings",

      # NOTE(amistry): As long as we support in-process Mojo v8 PAC, we need
      # this dependency since in_process_mojo_proxy_resolver_factory creates
      # the utility process side Mojo services in the browser process.
      # Ultimately, this will go away when we only support out-of-process.
      ":net_utility_services",
    ]
  }

  source_set("mojo_type_converters") {
    sources = [
      "dns/mojo_host_type_converters.cc",
      "dns/mojo_host_type_converters.h",
      "proxy/mojo_proxy_type_converters.cc",
      "proxy/mojo_proxy_type_converters.h",
    ]

    public_deps = [
      ":net",
      "//net/interfaces",
      "//third_party/mojo/src/mojo/public/cpp/bindings",
    ]
  }

  source_set("net_utility_services") {
    sources = [
      "dns/host_resolver_mojo.cc",
      "dns/host_resolver_mojo.h",
      "proxy/load_state_change_coalescer.cc",
      "proxy/load_state_change_coalescer.h",
      "proxy/mojo_proxy_resolver_factory_impl.cc",
      "proxy/mojo_proxy_resolver_factory_impl.h",
      "proxy/mojo_proxy_resolver_impl.cc",
      "proxy/mojo_proxy_resolver_impl.h",
      "proxy/proxy_resolver_error_observer_mojo.cc",
      "proxy/proxy_resolver_error_observer_mojo.h",
    ]

    deps = [
      ":net_with_v8",
    ]

    public_deps = [
      ":mojo_type_converters",
      ":net",
      "//mojo/common",
      "//net/interfaces",
      "//third_party/mojo/src/mojo/public/cpp/bindings",
    ]
  }
}

if (!is_ios && !is_android) {
  executable("crash_cache") {
    testonly = true
    sources = [
      "tools/crash_cache/crash_cache.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      ":test_support",
      "//base",
    ]
  }

  executable("crl_set_dump") {
    testonly = true
    sources = [
      "tools/crl_set_dump/crl_set_dump.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      "//base",
    ]
  }

  executable("dns_fuzz_stub") {
    testonly = true
    sources = [
      "tools/dns_fuzz_stub/dns_fuzz_stub.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    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",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      "//base",
      "//base:i18n",
      "//url",
    ]
  }

  executable("hpack_example_generator") {
    testonly = true
    sources = [
      "spdy/fuzzing/hpack_example_generator.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      "//base",
    ]
  }

  executable("hpack_fuzz_mutator") {
    testonly = true
    sources = [
      "spdy/fuzzing/hpack_fuzz_mutator.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      "//base",
    ]
  }

  executable("hpack_fuzz_wrapper") {
    testonly = true
    sources = [
      "spdy/fuzzing/hpack_fuzz_wrapper.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      "//base",
    ]
  }

  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 = [
      "tools/stress_cache/stress_cache.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    deps = [
      ":net",
      ":test_support",
      "//base",
    ]
  }

  executable("tld_cleanup") {
    sources = [
      "tools/tld_cleanup/tld_cleanup.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    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.cc",
      "tools/dump_cache/url_utilities.h",
      "tools/flip_server/acceptor_thread.cc",
      "tools/flip_server/acceptor_thread.h",
      "tools/flip_server/constants.h",
      "tools/flip_server/create_listener.cc",
      "tools/flip_server/create_listener.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.cc",
      "tools/flip_server/mem_cache.h",
      "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_interface.cc",
      "tools/flip_server/spdy_interface.h",
      "tools/flip_server/spdy_ssl.cc",
      "tools/flip_server/spdy_ssl.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 = [
      ":balsa",
      ":flip_in_mem_edsm_server_base",
      ":net",
      ":test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/boringssl",
    ]
  }

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

  source_set("epoll_quic_tools") {
    sources = [
      "tools/quic/quic_client.cc",
      "tools/quic/quic_client.h",
      "tools/quic/quic_default_packet_writer.cc",
      "tools/quic/quic_default_packet_writer.h",
      "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_packet_reader.cc",
      "tools/quic/quic_packet_reader.h",
      "tools/quic/quic_packet_writer_wrapper.cc",
      "tools/quic/quic_packet_writer_wrapper.h",
      "tools/quic/quic_server.cc",
      "tools/quic/quic_server.h",
      "tools/quic/quic_socket_utils.cc",
      "tools/quic/quic_socket_utils.h",
    ]
    deps = [
      ":balsa",
      ":epoll_server",
      ":net",
      "//base",
      "//base/third_party/dynamic_annotations",
      "//crypto",
      "//third_party/boringssl",
      "//url",
    ]
  }

  executable("epoll_quic_client") {
    sources = [
      "tools/quic/quic_client_bin.cc",
    ]
    deps = [
      ":balsa",
      ":epoll_quic_tools",
      ":epoll_server",
      ":net",
      ":simple_quic_tools",
      "//base",
      "//third_party/boringssl",
    ]
  }

  executable("epoll_quic_server") {
    sources = [
      "tools/quic/quic_server_bin.cc",
    ]
    deps = [
      ":balsa",
      ":epoll_quic_tools",
      ":epoll_server",
      ":net",
      ":simple_quic_tools",
      "//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",
    ]
  }
}

source_set("simple_quic_tools") {
  sources = [
    "tools/quic/quic_client_session.cc",
    "tools/quic/quic_client_session.h",
    "tools/quic/quic_dispatcher.cc",
    "tools/quic/quic_dispatcher.h",
    "tools/quic/quic_in_memory_cache.cc",
    "tools/quic/quic_in_memory_cache.h",
    "tools/quic/quic_per_connection_packet_writer.cc",
    "tools/quic/quic_per_connection_packet_writer.h",
    "tools/quic/quic_server_session.cc",
    "tools/quic/quic_server_session.h",
    "tools/quic/quic_simple_client.cc",
    "tools/quic/quic_simple_client.h",
    "tools/quic/quic_simple_per_connection_packet_writer.cc",
    "tools/quic/quic_simple_per_connection_packet_writer.h",
    "tools/quic/quic_simple_server.cc",
    "tools/quic/quic_simple_server.h",
    "tools/quic/quic_simple_server_packet_writer.cc",
    "tools/quic/quic_simple_server_packet_writer.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.cc",
    "tools/quic/quic_time_wait_list_manager.h",
    "tools/quic/synchronous_host_resolver.cc",
    "tools/quic/synchronous_host_resolver.h",
  ]
  deps = [
    ":net",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//url",
  ]
}

executable("quic_client") {
  sources = [
    "tools/quic/quic_simple_client_bin.cc",
  ]
  deps = [
    ":net",
    ":simple_quic_tools",
    "//base",
    "//url",
  ]
}

executable("quic_server") {
  sources = [
    "tools/quic/quic_simple_server_bin.cc",
  ]
  deps = [
    ":net",
    ":simple_quic_tools",
    "//base",
    "//third_party/boringssl",
    "//third_party/protobuf:protobuf_lite",
  ]
}

# TODO(GYP) make this compile on Android, we need some native test deps done.
# TODO(GYP) Also doesn't work on Mac, need to figure out why not.
if (!is_android && !is_mac) {
  test("net_unittests") {
    sources = gypi_values.net_test_sources

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    defines = []

    deps = [
      ":balsa",
      ":http_server",
      ":net",
      ":simple_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_desktop_linux) {
      deps += [ ":epoll_quic_tools" ]
    }
    if (is_linux) {
      sources += gypi_values.net_linux_test_sources
      deps += [
        ":balsa",
        ":epoll_quic_tools",
        ":epoll_server",
        ":flip_in_mem_edsm_server_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_test_jni_headers" ]
    }

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

    if (!use_nss_certs) {
      sources -= [
        "cert/nss_cert_database_unittest.cc",
        "ssl/client_cert_store_nss_unittest.cc",
      ]
      if (is_chromeos) {  # Already removed for all non-ChromeOS builds.
        sources -= [
          "cert/nss_cert_database_chromeos_unittest.cc",
          "cert/nss_profile_filter_chromeos_unittest.cc",
          "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/x509_util_nss_unittest.cc",
        "quic/test_tools/crypto_test_utils_nss.cc",
      ]
    } else {
      sources -= [
        "cert/x509_util_openssl_unittest.cc",
        "quic/test_tools/crypto_test_utils_openssl.cc",
        "socket/ssl_client_socket_openssl_unittest.cc",
        "ssl/ssl_client_session_cache_openssl_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 -= [ "cert_net/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_end_to_end_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_tracing_unittest.cc",
        "proxy/proxy_resolver_v8_unittest.cc",
      ]
    }

    if (use_v8_in_net && !is_android) {
      deps += [
        ":net_browser_services",
        ":net_utility_services",
        "//mojo/environment:chromium",
        "//third_party/mojo/src/mojo/edk/system",
      ]
    } else {
      sources -= [
        "dns/host_resolver_mojo_unittest.cc",
        "dns/mojo_host_resolver_impl_unittest.cc",
        "proxy/load_state_change_coalescer_unittest.cc",
        "proxy/mojo_proxy_resolver_factory_impl_unittest.cc",
        "proxy/mojo_proxy_resolver_impl_unittest.cc",
        "proxy/proxy_resolver_error_observer_mojo_unittest.cc",
        "proxy/proxy_resolver_mojo_unittest.cc",
        "proxy/proxy_service_mojo_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.
        "cert_net/cert_net_fetcher_impl_unittest.cc",
        "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" ]
    }
  }
}  # !is_android && !is_win && !is_mac

executable("net_perftests") {
  testonly = true
  sources = [
    "base/mime_sniffer_perftest.cc",
    "cookies/cookie_monster_perftest.cc",
    "disk_cache/blockfile/disk_cache_perftest.cc",
    "proxy/proxy_resolver_perftest.cc",
    "udp/udp_socket_perftest.cc",
  ]

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
  deps = [
    ":net",
    ":test_support",
    "//base",
    "//base:i18n",
    "//base/test:test_support_perf",
    "//testing/gtest",
    "//url",
  ]

  if (enable_websockets) {
    sources += [ "websockets/websocket_frame_perftest.cc" ]
  }

  if (use_v8_in_net) {
    deps += [ ":net_with_v8" ]
  } else {
    sources -= [ "proxy/proxy_resolver_perftest.cc" ]
  }

  if (is_win && icu_use_data_file) {
    # This is needed to trigger the dll copy step on windows.
    # TODO(mark): Specifying this here shouldn't be necessary.
    deps += [ "//third_party/icu:icudata" ]
  }
}
