# 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("//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")
import("//v8/gni/v8.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 || is_chromecast

  # 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" ]
  }
  if (enable_websockets) {
    defines += [ "ENABLE_WEBSOCKETS" ]
  }
}

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",
  "//build/config/compiler:wexit_time_destructors",
]

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

    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"
  component_build_force_source_set = true

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

static_library("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",
    "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_stream_factory_test_util.cc",
    "http/http_stream_factory_test_util.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/test_data_directory.cc",
    "test/test_data_directory.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 = []

  data = [
    "data/",
  ]

  if (is_ios) {
    deps += [ ":test_support_bundle_data" ]
  } else {
    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("cert_verify_tool") {
    testonly = true
    sources = [
      "tools/cert_verify_tool/cert_verify_tool.cc",
      "tools/cert_verify_tool/cert_verify_tool_util.cc",
      "tools/cert_verify_tool/cert_verify_tool_util.h",
      "tools/cert_verify_tool/verify_using_cert_verify_proc.cc",
      "tools/cert_verify_tool/verify_using_cert_verify_proc.h",
      "tools/cert_verify_tool/verify_using_path_builder.cc",
      "tools/cert_verify_tool/verify_using_path_builder.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",
    ]
  }

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

  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/AndroidCellularSignalStrength.java",
      "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_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_session_helper.cc",
    "tools/quic/quic_simple_server_session_helper.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/stateless_rejector.cc",
    "tools/quic/stateless_rejector.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",
    ":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_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",
    ]
  }

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

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

    bundle_deps = [ ":net_unittests_bundle_data" ]
  }

  # 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

# This has a global (InitGlobals) that must always be linked in, so
# must be a source set instead of a static library.
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",
    "udp/fuzzed_datagram_client_socket.cc",
    "udp/fuzzed_datagram_client_socket.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",
  ]
  dict = "data/fuzzer_dictionaries/net_mime_sniffer_fuzzer.dict"
}

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",
  ]
  dict = "data/fuzzer_dictionaries/net_parse_data_url_fuzzer.dict"
}

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",
  ]
  dict = "data/fuzzer_dictionaries/net_get_domain_and_registry_fuzzer.dict"
}

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",
  ]
  dict = "data/fuzzer_dictionaries/net_dns_record_fuzzer.dict"
}

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

fuzzer_test("net_host_resolver_impl_fuzzer") {
  sources = [
    "dns/fuzzed_host_resolver.cc",
    "dns/fuzzed_host_resolver.h",
    "dns/host_resolver_impl_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
  dict = "data/fuzzer_dictionaries/net_host_resolver_impl_fuzzer.dict"
}

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/fuzzer_dictionaries/net_http_stream_parser_fuzzer.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",
  ]
  dict = "data/fuzzer_dictionaries/net_websocket_frame_parser_fuzzer.dict"
}

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

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/fuzzer_dictionaries/net_http_proxy_client_socket_fuzzer.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/fuzzer_dictionaries/net_url_request_fuzzer.dict"
}
