# 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/chromecast_build.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//build_overrides/v8.gni")
import("//testing/test.gni")
import("//third_party/icu/config.gni")
import("//third_party/protobuf/proto_library.gni")
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, iOS, Chromecast and headless, at least for now.
# It needs configuration (krb5.conf and so on).
use_kerberos = !is_chromeos && !is_ios && !is_chromecast && !is_headless

# 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 = !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" ]
  }
  if (disable_ftp_support) {
    defines += [ "DISABLE_FTP_SUPPORT=1" ]
  }
}

# net_internal_config is shared with net and net_small.
config("net_internal_config") {
  defines = [
    # TODO(GYP) Note that the 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",
  ]

  if (use_kerberos) {
    defines += [ "USE_KERBEROS" ]
    if (is_android) {
      include_dirs = [ "/usr/include/kerberosV" ]
    }
  }

  if (enable_built_in_dns) {
    defines += [ "ENABLE_BUILT_IN_DNS" ]
  }
}

# net_shared_* are settings shared between net and net_small
net_shared_sources = gypi_values.net_nacl_common_sources

net_shared_unfiltered_sources = []

net_shared_configs = [
  ":net_internal_config",
  "//build/config:precompiled_headers",

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

net_shared_public_deps = [
  ":net_quic_proto",
  "//crypto",
  "//crypto:platform",
]

net_shared_deps = [
  ":net_resources",
  "//base",
  "//net/base/registry_controlled_domains",
  "//third_party/protobuf:protobuf_lite",
]

if (!is_nacl) {
  net_shared_sources += gypi_values.net_non_nacl_sources

  net_shared_deps += [
    "//base:prefs",
    "//base/third_party/dynamic_annotations",
    "//sdch",
    "//third_party/zlib",
  ]

  if (!use_kerberos) {
    net_shared_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) {
      net_shared_sources -= [ "disk_cache/blockfile/mapped_file_posix.cc" ]
    } else {
      net_shared_sources -=
          [ "disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc" ]
    }
  }

  if (!enable_built_in_dns) {
    net_shared_sources -= [
      "dns/address_sorter_posix.cc",
      "dns/address_sorter_posix.h",
      "dns/dns_client.cc",
    ]
  }

  if (use_openssl) {
    net_shared_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",
      "quic/crypto/proof_source_chromium_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.
      net_shared_sources -= [
        "cert/cert_verify_proc_nss.cc",
        "cert/cert_verify_proc_nss.h",
      ]
    }
    if (!use_nss_certs && !is_ios) {
      net_shared_sources -= [ "cert/x509_util_nss.h" ]
    }
  } else {
    net_shared_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/proof_source_chromium_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_ssl_util.cc",
      "ssl/openssl_ssl_util.h",
      "ssl/ssl_client_session_cache_openssl.cc",
      "ssl/ssl_client_session_cache_openssl.h",
      "ssl/ssl_platform_key.h",
      "ssl/ssl_platform_key_task_runner.cc",
      "ssl/ssl_platform_key_task_runner.h",
      "ssl/threaded_ssl_private_key.cc",
      "ssl/threaded_ssl_private_key.h",
    ]
  }

  if (!use_openssl_certs) {
    net_shared_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) {
      net_shared_sources -= [ "base/openssl_private_key_store_android.cc" ]
    }
  } else {
    if (is_android) {
      # Android doesn't use these even when using OpenSSL.
      net_shared_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",
        "http/http_auth_gssapi_posix.cc",
        "http/http_auth_gssapi_posix.h",
      ]
    }
  }

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

  if (is_linux) {
    net_shared_configs += [ "//build/config/linux:libresolv" ]
  }

  if (!use_nss_certs) {
    net_shared_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).
      net_shared_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.
      net_shared_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",
      ]
    }
    net_shared_sources -= [
      "ssl/client_key_store.cc",
      "ssl/client_key_store.h",
      "ssl/ssl_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.
    net_shared_sources += [ "third_party/nss/ssl/cmpcert.c" ]
  }

  if (!enable_mdns) {
    net_shared_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) {
    net_shared_sources -= [ "http/http_auth_handler_ntlm_portable.cc" ]
  } else {  # !is_win
    net_shared_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_ios) {
    # Add back some sources that were otherwise filtered out. iOS needs some Mac
    # files.
    net_shared_unfiltered_sources += [
      "base/mac/url_conversions.h",
      "base/mac/url_conversions.mm",
      "base/network_change_notifier_mac.cc",
      "base/network_config_watcher_mac.cc",
      "base/network_interfaces_mac.cc",
      "base/network_interfaces_mac.h",
      "base/platform_mime_util_mac.mm",
      "proxy/proxy_resolver_mac.cc",
      "proxy/proxy_server_mac.cc",
    ]

    net_shared_sources -= [ "disk_cache/blockfile/file_posix.cc" ]
    net_shared_deps += [
      "//third_party/nss:nspr",
      "//third_party/nss",
      "//net/third_party/nss/ssl:libssl",
    ]
  }

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

  if (is_android) {
    net_shared_deps += [ ":net_jni_headers" ]

    # Add some Linux sources that were excluded by the filter, but which
    # are needed.
    net_shared_unfiltered_sources += [
      "base/address_tracker_linux.cc",
      "base/address_tracker_linux.h",
      "base/network_interfaces_linux.cc",
      "base/network_interfaces_linux.h",
      "base/platform_mime_util_linux.cc",
    ]
  }
} else {
  net_shared_public_deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
}

component("net") {
  sources = net_shared_sources

  # Add back some sources that were otherwise filtered out.
  set_sources_assignment_filter([])
  sources += net_shared_unfiltered_sources
  set_sources_assignment_filter(sources_assignment_filter)

  cflags = []
  configs += net_shared_configs
  public_configs = [ ":net_config" ]

  public_deps = net_shared_public_deps + [ "//url" ]
  deps = net_shared_deps

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

  if (is_ios) {
    libs = [
      "CFNetwork.framework",
      "MobileCoreServices.framework",
      "Security.framework",
      "SystemConfiguration.framework",
      "resolv",
    ]
  }

  if (!is_nacl) {
    if (!disable_file_support) {
      sources += gypi_values.net_file_support_sources
    }

    if (!disable_ftp_support) {
      sources += gypi_values.net_ftp_support_sources
    }

    if (enable_websockets) {
      sources += gypi_values.net_websockets_sources
    }

    # ICU support.
    deps += [
      "//base:i18n",
      "//third_party/icu",
    ]
    sources += [
      "base/filename_util_icu.cc",
      "base/net_string_util_icu.cc",
      "base/net_util_icu.cc",
    ]
  }
}

if (is_android) {
  # Same as net, but with ICU, file, ftp, and websocket support stripped.
  component("net_small") {
    sources = net_shared_sources

    # Add back some sources that were otherwise filtered out.
    set_sources_assignment_filter([])
    sources += net_shared_unfiltered_sources
    set_sources_assignment_filter(sources_assignment_filter)

    cflags = []
    defines = []
    configs += net_shared_configs
    public_configs = [ ":net_config" ]

    public_deps = net_shared_public_deps +
                  [ "//url:url_lib_use_icu_alternatives_on_android" ]
    deps = net_shared_deps + [ ":net_jni_headers" ]

    defines += [
      "DISABLE_FILE_SUPPORT",
      "DISABLE_FTP_SUPPORT",
      "USE_ICU_ALTERNATIVES_ON_ANDROID=1",
    ]

    # Use ICU alternative on Android.
    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",
  ]
}

proto_library("net_quic_proto") {
  visibility = [
    ":net",
    ":net_small",
  ]

  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("extras") {
  sources = gypi_values.net_extras_sources
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  deps = [
    ":net",
    "//base",
    "//sql:sql",
  ]
}

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/dump_cache.cc",
    "tools/dump_cache/dump_files.cc",
    "tools/dump_cache/dump_files.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",
    "//build/config/sanitizers:deps",
  ]
}

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/channel_id_test_util.cc",
    "test/channel_id_test_util.h",
    "test/ct_test_util.cc",
    "test/ct_test_util.h",
    "test/embedded_test_server/default_handlers.cc",
    "test/embedded_test_server/default_handlers.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/embedded_test_server/request_handler_util.cc",
    "test/embedded_test_server/request_handler_util.h",
    "test/event_waiter.h",
    "test/net_test_suite.cc",
    "test/net_test_suite.h",
    "test/python_utils.cc",
    "test/python_utils.h",
    "test/url_request/ssl_certificate_error_job.cc",
    "test/url_request/ssl_certificate_error_job.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",
  ]
  if (!is_ios) {
    sources += [
      "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/spawned_test_server.h",
    ]
  }

  configs += [
    "//build/config:precompiled_headers",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//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_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_resolver_v8_tracing_wrapper.cc",
      "proxy/proxy_resolver_v8_tracing_wrapper.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",
      "//v8:external_startup_data",
    ]

    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_factory_mojo.cc",
      "proxy/proxy_resolver_factory_mojo.h",
      "proxy/proxy_service_mojo.cc",
      "proxy/proxy_service_mojo.h",
    ]

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

      # 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",
      "//mojo/public/cpp/bindings",
      "//net/interfaces",
    ]
  }

  source_set("net_utility_services") {
    sources = [
      "dns/host_resolver_mojo.cc",
      "dns/host_resolver_mojo.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/mojo_proxy_resolver_v8_tracing_bindings.h",
    ]

    deps = [
      ":net_with_v8",
    ]

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

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",
      "//build/config/sanitizers:deps",
    ]
  }

  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",
      "//build/config/sanitizers:deps",
    ]
  }

  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",
      "//build/config/sanitizers:deps",
    ]
  }

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

  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",
      "//build/config/sanitizers:deps",
      "//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",
      "//build/config/sanitizers:deps",
    ]
  }

  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",
      "//build/config/sanitizers:deps",
    ]
  }

  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",
      "//build/config/sanitizers:deps",
    ]
  }

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

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

  executable("run_testserver") {
    testonly = true
    sources = [
      "tools/testserver/run_testserver.cc",
    ]
    deps = [
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//build/config/sanitizers:deps",
      "//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",
      "//build/config/sanitizers:deps",
    ]
  }

  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",
      "//build/config/sanitizers:deps",
      "//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/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/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",
      "tools/flip_server/url_to_filename_encoder.cc",
      "tools/flip_server/url_to_filename_encoder.h",
      "tools/flip_server/url_utilities.cc",
      "tools/flip_server/url_utilities.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",
      "tools/flip_server/url_to_filename_encoder_unittest.cc",
      "tools/flip_server/url_utilities_unittest.cc",
    ]
    deps = [
      ":balsa",
      ":flip_in_mem_edsm_server_base",
      ":net",
      ":test_support",
      "//build/config/sanitizers:deps",
      "//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",
      "//build/config/sanitizers:deps",
    ]
  }

  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",
      "//build/config/sanitizers:deps",
      "//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",
      "//build/config/sanitizers:deps",
      "//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/AndroidTrafficStats.java",
      "android/java/src/org/chromium/net/GURLUtils.java",
      "android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java",
      "android/java/src/org/chromium/net/NetStringUtil.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",
      "test/android/javatests/src/org/chromium/net/test/DummySpnegoAuthenticator.java",
      "test/android/javatests/src/org/chromium/net/test/EmbeddedTestServer.java",
    ]
    jni_package = "net/test"
  }
}

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",
      "//build/config/sanitizers:deps",
    ]
  }
}

source_set("simple_quic_tools") {
  sources = [
    "tools/quic/quic_client_base.cc",
    "tools/quic/quic_client_base.h",
    "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",
  ]
}

if (!is_ios) {
  executable("quic_client") {
    sources = [
      "tools/quic/quic_simple_client_bin.cc",
    ]
    deps = [
      ":net",
      ":simple_quic_tools",
      "//base",
      "//build/config/sanitizers:deps",
      "//url",
    ]
  }
  executable("quic_server") {
    sources = [
      "tools/quic/quic_simple_server_bin.cc",
    ]
    deps = [
      ":net",
      ":simple_quic_tools",
      "//base",
      "//build/config/sanitizers:deps",
      "//third_party/boringssl",
      "//third_party/protobuf:protobuf_lite",
    ]
  }
}

# TODO(GYP): Delete this after we've converted everything to GN.
# The _run targets exist only for compatibility w/ GYP.
group("net_unittests_run") {
  testonly = true
  deps = [
    ":net_unittests",
  ]
}

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

  if (is_ios) {
    sources -= [
      "websockets/websocket_stream_cookie_test.cc",
      "websockets/websocket_stream_create_test_base.cc",
      "websockets/websocket_stream_create_test_base.h",
    ]
  }

  configs += [
    "//build/config:precompiled_headers",

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

  deps = [
    ":balsa",
    ":extras",
    ":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",
    "//sql",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/zlib",
    "//url",
  ]

  data = [
    "data/",
  ]

  if (is_linux || is_mac || is_win) {
    deps += [
      "//third_party/pyftpdlib/",
      "//third_party/pywebsocket/",
      "//third_party/tlslite/",
    ]
    data_deps = [
      "//third_party/pyftpdlib/",
      "//third_party/pywebsocket/",
      "//third_party/tlslite/",
    ]
    data += [
      "tools/testserver/",
      "//third_party/pyftpdlib/",
      "//third_party/pywebsocket/",
      "//third_party/tlslite/",
      "$root_out_dir/pyproto/google/",
    ]
  }

  if (is_desktop_linux) {
    deps += [ ":epoll_quic_tools" ]
  }
  if (is_linux) {
    sources += gypi_values.net_linux_test_sources
    deps += [
      ":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 (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",
      ]
    }
  }

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

  # These are excluded on Android, because the actual Kerberos support, which
  # these test, is in a separate app on Android.
  if (!use_kerberos || is_android) {
    sources -= [
      "http/http_auth_gssapi_posix_unittest.cc",
      "http/mock_gssapi_library_posix.cc",
      "http/mock_gssapi_library_posix.h",
    ]
  }
  if (!use_kerberos) {
    sources -= [ "http/http_auth_handler_negotiate_unittest.cc" ]
  }

  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_parameters_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_extension_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_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",
    ]
  }

  if (use_v8_in_net) {
    deps += [ ":net_with_v8" ]
  } else {
    sources -= [
      "proxy/proxy_resolver_v8_tracing_unittest.cc",
      "proxy/proxy_resolver_v8_tracing_wrapper_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/mojo_proxy_resolver_factory_impl_unittest.cc",
      "proxy/mojo_proxy_resolver_impl_unittest.cc",
      "proxy/mojo_proxy_resolver_v8_tracing_bindings_unittest.cc",
      "proxy/proxy_resolver_factory_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/certificate_policies_unittest/',
    #          'data/name_constraints_unittest/',
    #          'data/ssl/certificates/',
    #          'data/test.html',
    #          'data/url_request_unittest/',
    #          'data/verify_name_match_unittest/names/',
    #          'data/parse_certificate_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_server_socket_posix_unittest.cc",

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

  if (is_android) {
    apk_deps = [
      "//base:base_java_unittest_support",
      "//net/android:net_java",
      "//net/android:net_javatests",
      "//net/android:net_java_test_support",
      "//net/android:net_unittests_apk_resources",
      "//v8:v8_external_startup_data_assets",
    ]
    android_manifest = "//net/android/unittest_support/AndroidManifest.xml"
    sources -= [
      # See bug http://crbug.com/344533.
      "disk_cache/blockfile/index_table_v3_unittest.cc",
    ]
    deps += [
      ":net_test_jni_headers",

      # TODO(mmenke):  This depends on test_support_base, which depends on
      #                icu.  Figure out a way to remove that dependency.
      "//testing/android/native_test:native_test_native_code",
    ]
    set_sources_assignment_filter([])
    sources += [ "base/address_tracker_linux_unittest.cc" ]
    set_sources_assignment_filter(sources_assignment_filter)
    isolate_file = "net_unittests.isolate"
  }

  # Symbols for crashes when running tests on swarming.
  if (symbol_level > 0) {
    if (is_win) {
      data += [ "$root_out_dir/net_unittests.exe.pdb" ]
    } else if (is_mac) {
      data += [ "$root_out_dir/net_unittests.dSYM/" ]
    }
  }
}

# !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",
    "extras/sqlite/sqlite_persistent_cookie_store_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 = [
    ":extras",
    ":net",
    ":test_support",
    "//base",
    "//base:i18n",
    "//base/test:test_support_perf",
    "//build/config/sanitizers:deps",
    "//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" ]
  }
}
