# 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/buildflag_header.gni")
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/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")
import("//third_party/icu/config.gni")
import("//third_party/protobuf/proto_library.gni")
import("//tools/grit/grit_rule.gni")
import("//url/features.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" ])

# 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"

use_v8_in_net = !is_ios
enable_built_in_dns = !is_ios

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

  # WebSockets and socket stream code are not used on iOS and are optional in
  # cronet.
  enable_websockets = !is_ios
  disable_ftp_support = is_ios

  # Enable Kerberos authentication. It is disabled by default on ChromeOS, iOS,
  # Chromecast, at least for now. This feature needs configuration (krb5.conf
  # and so on).
  use_kerberos = !is_chromeos && !is_ios && !is_chromecast

  # Do not disable brotli filter by default.
  disable_brotli_filter = 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" ]
  }
}

config("net_internal_config") {
  defines = [
    "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_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",
]

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

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

component("net") {
  sources = gypi_values.net_nacl_common_sources
  net_unfiltered_sources = []

  deps = [
    ":net_resources",
    "//base",
    "//net/base/registry_controlled_domains",
    "//third_party/protobuf:protobuf_lite",
    "//url:url_features",
  ]

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

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

    deps += [
      "//base/third_party/dynamic_annotations",
      "//components/prefs",
      "//sdch",
      "//third_party/zlib",
    ]

    if (!use_kerberos) {
      sources -= [
        "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 (!enable_built_in_dns) {
      sources -= [
        "dns/address_sorter_posix.cc",
        "dns/address_sorter_posix.h",
        "dns/dns_client.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 (!use_kerberos || is_android) {
      sources -= [
        "http/http_auth_gssapi_posix.cc",
        "http/http_auth_gssapi_posix.h",
      ]
    }

    if (use_glib && use_gconf && !is_chromeos) {
      deps += [ "//build/linux/libgio" ]
    }

    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_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",
        ]
      }
      sources -= [
        "ssl/client_key_store.cc",
        "ssl/client_key_store.h",
        "ssl/ssl_platform_key_nss.cc",
      ]
    } else {
      # 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 (!use_nss_certs) {
      # These files are part of the partial implementation of NSS for
      # cert verification, so keep them in that case.
      sources -= [
        "cert/cert_verify_proc_nss.cc",
        "cert/cert_verify_proc_nss.h",
        "cert/test_root_certs_nss.cc",
        "cert/x509_util_nss.cc",
        "cert_net/nss_ocsp.cc",
        "cert_net/nss_ocsp.h",
      ]
    }

    if (is_chromecast && use_nss_certs) {
      sources += [ "ssl/ssl_platform_key_chromecast.cc" ]
      sources -= [ "ssl/ssl_platform_key_nss.cc" ]
    }

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

    if (is_win) {
      sources -= [ "http/http_auth_handler_ntlm_portable.cc" ]
    } 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_ios) {
      # Add back some sources that were otherwise filtered out.
      # iOS needs some Mac files.
      net_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",
        "cert/test_root_certs_mac.cc",
        "proxy/proxy_resolver_mac.cc",
        "proxy/proxy_server_mac.cc",
      ]

      sources -= [ "disk_cache/blockfile/file_posix.cc" ]
    }

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

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

      # Add some Linux sources that were excluded by the filter, but which
      # are needed.
      net_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 {
    public_deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
  }

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

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

  public_deps += [ "//url" ]

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

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

  if (is_win) {
    libs = [
      "crypt32.lib",
      "dhcpcsvc.lib",
      "iphlpapi.lib",
      "rpcrt4.lib",
      "secur32.lib",
      "urlmon.lib",
      "winhttp.lib",
    ]
  }

  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.
    if (use_platform_icu_alternatives) {
      if (is_android) {
        # Use ICU alternative on Android.
        sources += [
          "base/net_string_util_icu_alternatives_android.cc",
          "base/net_string_util_icu_alternatives_android.h",
        ]
        deps += [ ":net_jni_headers" ]
      } else if (is_ios) {
        # Use ICU alternative on iOS.
        sources += [ "base/net_string_util_icu_alternatives_ios.mm" ]
      } else {
        assert(false,
               "ICU alternative is not implemented for platform: " + target_os)
      }
    } else {
      # Use ICU.
      deps += [
        "//base:i18n",
        "//third_party/icu",
      ]
      sources += [
        "base/filename_util_icu.cc",
        "base/net_string_util_icu.cc",
      ]
    }

    # Brotli support.
    if (!disable_brotli_filter) {
      sources += [ "filter/brotli_filter.cc" ]
      deps += [ "//third_party/brotli" ]
    } else {
      sources += [ "filter/brotli_filter_disabled.cc" ]
    }
  }
}

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

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

if (!is_ios) {
  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",
      "//build/win:default_exe_manifest",
    ]
  }
}

bundle_data("test_support_bundle_data") {
  visibility = [ ":test_support" ]
  testonly = true
  sources = gypi_values.net_test_support_data_sources
  outputs = [
    "{{bundle_resources_dir}}/" +
        "{{source_root_relative_dir}}/{{source_file_part}}",
  ]
}

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",
    "cert/mock_client_cert_verifier.cc",
    "cert/mock_client_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",
    "cookies/cookie_store_unittest.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/gtest_util.h",
    "test/net_test_suite.cc",
    "test/net_test_suite.h",
    "test/python_utils.cc",
    "test/python_utils.h",
    "test/scoped_disable_exit_on_dfatal.cc",
    "test/scoped_disable_exit_on_dfatal.h",
    "test/test_certificate_data.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_hanging_read_job.cc",
    "test/url_request/url_request_hanging_read_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",
  ]

  deps = [
    ":test_support_bundle_data",
  ]

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

  if (use_nss_certs) {
    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/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_with_v8",
      "//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",
      "//base",
      "//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",
      "//base",
    ]

    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",
      "//build/win:default_exe_manifest",
    ]
  }

  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",
      "//build/win:default_exe_manifest",
    ]
  }

  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",
      "//build/win:default_exe_manifest",
    ]
  }

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

  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",
      "//build/win:default_exe_manifest",
      "//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",
      "//build/win:default_exe_manifest",
    ]
  }

  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",
      "//build/win:default_exe_manifest",
    ]
  }

  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",
      "//build/win:default_exe_manifest",
    ]
  }

  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",
        "//build/win:default_exe_manifest",
      ]

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

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

  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",
      "//build/win:default_exe_manifest",
      "//net/tools/tld_cleanup",
    ]
  }
}

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

  executable("content_decoder_tool") {
    testonly = true
    sources = [
      "filter/mock_filter_context.cc",
      "filter/mock_filter_context.h",
      "tools/content_decoder_tool/content_decoder_tool.cc",
    ]
    deps = [
      ":net",
      ":test_support",
      "//base",
      "//url",
    ]
  }
}

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/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/tcp_socket_util.cc",
      "tools/flip_server/tcp_socket_util.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_alarm_factory.cc",
      "tools/quic/quic_epoll_alarm_factory.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",
      ":simple_quic_tools",
      "//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/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/EmbeddedTestServerImpl.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/chlo_extractor.cc",
    "tools/quic/chlo_extractor.h",
    "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_process_packet_interface.h",
    "tools/quic/quic_server_session_base.cc",
    "tools/quic/quic_server_session_base.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_simple_server_session.cc",
    "tools/quic/quic_simple_server_session.h",
    "tools/quic/quic_simple_server_stream.cc",
    "tools/quic/quic_simple_server_stream.h",
    "tools/quic/quic_spdy_client_stream.cc",
    "tools/quic/quic_spdy_client_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 = [
    ":balsa",
    ":net",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//url",
  ]
}

action_foreach("stale_while_revalidate_experiment_domains_dafsa") {
  script = "//net/tools/dafsa/make_dafsa.py"
  sources = [
    "base/stale_while_revalidate_experiment_domains.gperf",
  ]
  outputs = [
    "${target_gen_dir}/base/{{source_name_part}}-inc.cc",
  ]
  args = [
    "{{source}}",
    rebase_path("${target_gen_dir}/base/{{source_name_part}}-inc.cc",
                root_build_dir),
  ]
}

source_set("stale_while_revalidate_experiment_domains") {
  sources = [
    "base/stale_while_revalidate_experiment_domains.cc",
    "base/stale_while_revalidate_experiment_domains.h",
  ]
  deps = [
    ":net",
    ":stale_while_revalidate_experiment_domains_dafsa",
    "//base",
  ]
  configs += net_configs
}

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

bundle_data("net_unittests_bundle_data") {
  testonly = true
  sources = gypi_values.net_unittests_data_sources
  outputs = [
    "{{bundle_resources_dir}}/" +
        "{{source_root_relative_dir}}/{{source_file_part}}",
  ]
}

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

  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",
    ":net",
    ":net_unittests_bundle_data",
    ":simple_quic_tools",
    ":stale_while_revalidate_experiment_domains",
    ":test_support",
    "//base",
    "//base:i18n",
    "//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",
    "//url:url_features",
  ]

  data = [
    "data/",
  ]
  data_deps = [
    "third_party/nist-pkits/",
  ]

  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_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_nss_certs) {
    # Only include this test when using NSS for cert verification.
    sources -= [ "cert_net/nss_ocsp_unittest.cc" ]
  }

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

  if (enable_websockets) {
    sources += gypi_values.net_websockets_test_sources
    deps += [ ":http_server" ]
  }

  if (disable_file_support) {
    sources -= [
      "base/directory_lister_unittest.cc",
      "base/directory_listing_unittest.cc",
      "url_request/url_request_file_dir_job_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/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) {
    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",
    ]
  }

  # Unit tests that aren't supported by the current ICU alternatives on Android.
  if (is_android && use_platform_icu_alternatives) {
    sources -= [
      "base/filename_util_unittest.cc",
      "base/url_util_unittest.cc",
      "cert/x509_certificate_unittest.cc",
      "proxy/proxy_resolver_v8_unittest.cc",
      "url_request/url_request_job_unittest.cc",
    ]
  }

  # Unit tests that are not supported by the current ICU alternatives on iOS.
  if (is_ios && use_platform_icu_alternatives) {
    sources -= [
      "base/filename_util_unittest.cc",
      "base/url_util_unittest.cc",
      "cert/x509_certificate_unittest.cc",
      "http/http_auth_handler_basic_unittest.cc",
      "http/http_auth_handler_digest_unittest.cc",
      "http/http_auth_handler_factory_unittest.cc",
      "http/http_auth_unittest.cc",
      "http/http_content_disposition_unittest.cc",
      "http/http_network_transaction_unittest.cc",
      "http/http_proxy_client_socket_pool_unittest.cc",
      "socket/ssl_client_socket_pool_unittest.cc",
      "spdy/spdy_network_transaction_unittest.cc",
      "spdy/spdy_proxy_client_socket_unittest.cc",
      "url_request/url_request_job_unittest.cc",
      "url_request/url_request_unittest.cc",
    ]
  }

  # Exclude brotli test if the support for brotli is disabled.
  # Also, exclude the test from iOS for now (needs to read input data files).
  if (disable_brotli_filter || is_ios) {
    sources -= [ "filter/brotli_filter_unittest.cc" ]
  }

  if (is_android) {
    data_deps += [ "//net/tools/testserver:testserver_py" ]
    deps += [
      ":net_test_jni_headers",
      "//base:base_java_unittest_support",
      "//net/android:net_java",
      "//net/android:net_java_test_support",
      "//net/android:net_javatests",
      "//net/android:net_unittests_apk_resources",

      # 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",
      "//v8:v8_external_startup_data_assets",
    ]
    android_manifest = "//net/android/unittest_support/AndroidManifest.xml"
    set_sources_assignment_filter([])
    sources += [ "base/address_tracker_linux_unittest.cc" ]
    set_sources_assignment_filter(sources_assignment_filter)
    shard_timeout = 300
  }

  # 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) {
      # TODO(crbug.com/330301): make this conditional on mac_strip_release.
      # data += [ "$root_out_dir/net_unittests.dSYM/" ]
    }
  }

  if (is_win) {
    libs = [
      "iphlpapi.lib",
    ]
  }
}

# !is_android && !is_win && !is_mac
if (!is_ios) {
  # TODO(crbug.com/594965): this should be converted to "app" template and
  # enabled on iOS too.
  executable("net_perftests") {
    testonly = true
    sources = [
      "base/mime_sniffer_perftest.cc",
      "cookies/cookie_monster_perftest.cc",
      "disk_cache/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",
      "//build/win:default_exe_manifest",
      "//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" ]
    }
  }
}

# Fuzzers

source_set("net_fuzzer_test_support") {
  testonly = true

  sources = [
    "base/fuzzed_data_provider.cc",
    "base/fuzzed_data_provider.h",
    "base/fuzzer_test_support.cc",
    "socket/fuzzed_socket.cc",
    "socket/fuzzed_socket.h",
    "socket/fuzzed_socket_factory.cc",
    "socket/fuzzed_socket_factory.h",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//net",
  ]
}

fuzzer_test("net_data_job_fuzzer") {
  sources = [
    "url_request/url_request_data_job_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_mime_sniffer_fuzzer") {
  sources = [
    "base/mime_sniffer_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_parse_proxy_list_pac_fuzzer") {
  sources = [
    "proxy/parse_proxy_list_pac_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_parse_proxy_list_fuzzer") {
  sources = [
    "proxy/parse_proxy_list_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_parse_proxy_bypass_rules_fuzzer") {
  sources = [
    "proxy/parse_proxy_bypass_rules_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_parse_proxy_rules_fuzzer") {
  sources = [
    "proxy/parse_proxy_rules_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_parse_data_url_fuzzer") {
  sources = [
    "base/parse_data_url_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_parse_ip_pattern_fuzzer") {
  sources = [
    "base/parse_ip_pattern_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_get_domain_and_registry_fuzzer") {
  sources = [
    "base/registry_controlled_domains/get_domain_and_registry_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_cert_verify_name_match_fuzzer") {
  sources = [
    "cert/internal/verify_name_match_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_cert_normalize_name_fuzzer") {
  sources = [
    "cert/internal/verify_name_match_normalizename_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//net",
  ]
}

fuzzer_test("net_cert_verify_name_in_subtree_fuzzer") {
  sources = [
    "cert/internal/verify_name_match_verifynameinsubtree_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_cert_parse_certificate_fuzzer") {
  sources = [
    "cert/internal/parse_certificate_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//net",
  ]
}

fuzzer_test("net_parse_cookie_line_fuzzer") {
  sources = [
    "cookies/parse_cookie_line_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_dns_record_fuzzer") {
  sources = [
    "dns/dns_record_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_dns_hosts_parse_fuzzer") {
  sources = [
    "dns/dns_hosts_parse_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_http_stream_parser_fuzzer") {
  sources = [
    "http/http_stream_parser_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
  dict = "data/http/http.dict"
}

fuzzer_test("net_ftp_ctrl_response_fuzzer") {
  sources = [
    "ftp/ftp_ctrl_response_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_ftp_directory_listing_fuzzer") {
  sources = [
    "ftp/ftp_directory_listing_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_unescape_url_component_fuzzer") {
  sources = [
    "base/unescape_url_component_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
  dict = "base/unescape_url_component_fuzzer.dict"
  libfuzzer_options = [ "max_len = 2048" ]
}

fuzzer_test("net_websocket_frame_parser_fuzzer") {
  sources = [
    "websockets/websocket_frame_parser_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
}

fuzzer_test("net_http_chunked_decoder_fuzzer") {
  sources = [
    "http/http_chunked_decoder_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
  dict = "http/http_chunked_decoder_fuzzer.dict"
}

fuzzer_test("net_http_proxy_client_socket_fuzzer") {
  sources = [
    "http/http_proxy_client_socket_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
  dict = "data/http/http.dict"
}

fuzzer_test("net_quic_crypto_framer_parse_message_fuzzer") {
  sources = [
    "quic/quic_crypto_framer_parse_message_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_socks_client_socket_fuzzer") {
  sources = [
    "socket/socks_client_socket_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_socks5_client_socket_fuzzer") {
  sources = [
    "socket/socks5_client_socket_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_url_request_fuzzer") {
  sources = [
    "url_request/url_request_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
  dict = "data/http/http.dict"
}
