# 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("//net/features.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

buildflag_header("features") {
  header = "net_features.h"
  flags = [
    "POSIX_AVOID_MMAP=$posix_avoid_mmap",
    "DISABLE_FILE_SUPPORT=$disable_file_support",
    "DISABLE_FTP_SUPPORT=$disable_ftp_support",
    "ENABLE_MDNS=$enable_mdns",
    "ENABLE_WEBSOCKETS=$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_gio) {
      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/internal/trust_store_nss.cc",
        "cert/internal/trust_store_nss.h",
        "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 {
      sources += [
        "third_party/nss/ssl/cmpcert.cc",
        "third_party/nss/ssl/cmpcert.h",
      ]
    }

    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_deps += [
    ":features",
    "//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",
      "ncrypt.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" ]
        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_source_stream.cc" ]
      deps += [ "//third_party/brotli" ]
    } else {
      sources += [ "filter/brotli_source_stream_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/core/proto/cached_network_parameters.proto",
    "quic/core/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",
    "filter/mock_source_stream.cc",
    "filter/mock_source_stream.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",
    "nqe/network_quality_estimator_test_util.cc",
    "nqe/network_quality_estimator_test_util.h",
    "proxy/mock_proxy_resolver.cc",
    "proxy/mock_proxy_resolver.h",
    "proxy/mock_proxy_script_fetcher.cc",
    "proxy/mock_proxy_script_fetcher.h",
    "proxy/proxy_config_service_common_unittest.cc",
    "proxy/proxy_config_service_common_unittest.h",
    "socket/socket_test_util.cc",
    "socket/socket_test_util.h",
    "test/cert_test_util.cc",
    "test/cert_test_util.h",
    "test/cert_test_util_nss.cc",
    "test/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",
    ]
  }
}

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 = [
      ":net_with_v8",
      "//base",
      "//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("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 = [
      ":net",
      "//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",
      ]
    }
  }

  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 = [
      "tools/content_decoder_tool/content_decoder_tool.cc",
      "tools/content_decoder_tool/content_decoder_tool.h",
      "tools/content_decoder_tool/content_decoder_tool_bin.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 = [
      ":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 = [
      ":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 = [
      ":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_crypto_server_stream_helper.cc",
    "tools/quic/quic_simple_crypto_server_stream_helper.h",
    "tools/quic/quic_simple_dispatcher.cc",
    "tools/quic/quic_simple_dispatcher.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 = [
    ":net",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//url",
  ]
}

if (!is_ios) {
  executable("quic_client") {
    sources = [
      "tools/quic/quic_simple_client_bin.cc",
    ]
    deps = [
      ":net",
      ":simple_quic_tools",
      "//base",
      "//build/config/sanitizers:deps",
      "//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("quic_reject_reason_decoder") {
    sources = [
      "tools/quic/quic_reject_reason_decoder_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 = [
    ":extras",
    ":net",
    ":simple_quic_tools",
    ":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_mac) {
    libs = [ "Security.framework" ]
  }

  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/internal/trust_store_nss_unittest.cc",
      "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.
      "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.
  if (disable_brotli_filter) {
    sources -= [ "filter/brotli_source_stream_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",
      "socket/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/fuzzer_test_support.cc",
    "dns/fuzzed_host_resolver.cc",
    "dns/fuzzed_host_resolver.h",
    "filter/fuzzed_source_stream.cc",
    "filter/fuzzed_source_stream.h",
    "socket/fuzzed_datagram_client_socket.cc",
    "socket/fuzzed_datagram_client_socket.h",
    "socket/fuzzed_socket.cc",
    "socket/fuzzed_socket.h",
    "socket/fuzzed_socket_factory.cc",
    "socket/fuzzed_socket_factory.h",
  ]
  public_deps = [
    "//base/test:test_support",
  ]
  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",
  ]
  dict = "data/fuzzer_dictionaries/net_parse_proxy_bypass_rules_fuzzer.dict"
}

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

if (!disable_brotli_filter) {
  fuzzer_test("net_brotli_source_stream_fuzzer") {
    sources = [
      "filter/brotli_source_stream_fuzzer.cc",
    ]
    deps = [
      ":net_fuzzer_test_support",
      ":test_support",
      "//base",
      "//net",
    ]
  }
}

fuzzer_test("net_gzip_source_stream_fuzzer") {
  sources = [
    "filter/gzip_source_stream_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
}

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_deflate_stream_fuzzer") {
  sources = [
    "websockets/websocket_deflate_stream_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
  dict = "data/fuzzer_dictionaries/net_websocket_frame_parser_fuzzer.dict"
  libfuzzer_options = [ "max_len=512" ]
}

fuzzer_test("net_websocket_extension_parser_fuzzer") {
  sources = [
    "websockets/websocket_extension_parser_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//net",
  ]
  dict = "data/fuzzer_dictionaries/net_websocket_extension_parser_fuzzer.dict"
  libfuzzer_options = [ "max_len = 256" ]
}

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

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_parse_url_hostname_to_address_fuzzer") {
  sources = [
    "base/parse_url_hostname_to_address_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
  ]
  libfuzzer_options = [ "max_len=512" ]
  seed_corpus = "data/fuzzer_data/hostnames/"
}

fuzzer_test("net_quic_crypto_framer_parse_message_fuzzer") {
  sources = [
    "quic/core/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_ftp_fuzzer") {
  sources = [
    "url_request/url_request_ftp_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
  dict = "data/fuzzer_dictionaries/net_url_request_ftp_fuzzer.dict"
  seed_corpus = "data/fuzzer_data/net_url_request_ftp_fuzzer/"
}

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

fuzzer_test("net_auth_challenge_tokenizer_fuzzer") {
  sources = [
    "http/http_auth_challenge_tokenizer_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    ":test_support",
    "//base",
    "//net",
  ]
}

fuzzer_test("net_http_security_headers_hsts_fuzzer") {
  sources = [
    "http/http_security_headers_hsts_fuzzer.cc",
  ]
  deps = [
    "//base",
    "//net",
  ]
  dict = "data/fuzzer_dictionaries/net_http_security_headers_fuzzer.dict"
}

fuzzer_test("net_http_security_headers_hpkp_fuzzer") {
  sources = [
    "http/http_security_headers_hpkp_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
    "//url",
  ]
  dict = "data/fuzzer_dictionaries/net_http_security_headers_fuzzer.dict"
}

fuzzer_test("net_http_security_headers_hpkp_report_only_fuzzer") {
  sources = [
    "http/http_security_headers_hpkp_report_only_fuzzer.cc",
  ]
  deps = [
    ":net_fuzzer_test_support",
    "//base",
    "//net",
    "//url",
  ]
  dict = "data/fuzzer_dictionaries/net_http_security_headers_fuzzer.dict"
}
