blob: 4a6503c68938b39d31964f3f4b8bb995b2031213 [file] [log] [blame]
# Copyright 2018 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("//testing/libfuzzer/fuzzer_test.gni")
import("//net/features.gni")
enable_built_in_dns = !is_ios && !is_proto_quic
source_set("dns") {
# Due to circular dependencies, should only be depended on through //net.
visibility = [ "//net" ]
# Internals only intended for use inside network stack (and tests).
friend = [
"//chrome/browser:test_support",
"//chrome/test/*",
"//components/certificate_transparency:unit_tests",
"//components/cronet/*",
"//net/*",
"//services/network/*",
]
public = []
sources = [
"dns_util.cc",
"dns_util.h",
]
if (!is_nacl) {
sources += [
"address_sorter.h",
"address_sorter_win.cc",
"dns_config.cc",
"dns_config_service.cc",
"dns_config_service.h",
"dns_config_service_win.cc",
"dns_config_service_win.h",
"dns_config_watcher_mac.cc",
"dns_config_watcher_mac.h",
"dns_hosts.cc",
"dns_hosts.h",
"dns_query.cc",
"dns_query.h",
"dns_reloader.cc",
"dns_reloader.h",
"dns_response.cc",
"dns_session.cc",
"dns_session.h",
"dns_socket_pool.cc",
"dns_socket_pool.h",
"dns_transaction.cc",
"host_cache.cc",
"host_resolver.cc",
"host_resolver_impl.cc",
"host_resolver_mdns_task.cc",
"host_resolver_mdns_task.h",
"host_resolver_proc.cc",
"host_resolver_proc.h",
"host_resolver_source.h",
"mapped_host_resolver.cc",
"notify_watcher_mac.cc",
"notify_watcher_mac.h",
"record_parsed.cc",
"record_rdata.cc",
"serial_worker.cc",
"serial_worker.h",
]
if (is_posix || is_fuchsia) {
sources += [ "dns_config_service_posix.cc" ]
if (enable_built_in_dns) {
sources += [
"address_sorter_posix.cc",
"address_sorter_posix.h",
]
}
}
if (enable_built_in_dns) {
sources += [ "dns_client.cc" ]
}
if (enable_mdns) {
sources += [
"mdns_cache.cc",
"mdns_cache.h",
"mdns_client.cc",
"mdns_client_impl.cc",
"mdns_client_impl.h",
]
}
}
deps = [
"//net:net_deps",
]
public_deps = [
":dns_client",
":host_resolver",
":host_resolver_impl",
":mdns_client",
"//net:net_public_deps",
]
allow_circular_includes_from = [
":dns_client",
":host_resolver",
":host_resolver_impl",
":mdns_client",
]
}
# The standard API of net/dns.
#
# Should typically only be used within the network service. Usage external to
# the network service should instead use network service Mojo IPCs for host
# resolution. See ResolveHost() in
# /services/network/public/mojom/network_context.mojom and
# /services/network/public/mojom/host_resolver.mojom.
source_set("host_resolver") {
# Due to circular dependencies, should only be depended on through //net.
# Limit visibility to //net and other source_sets with the same access
# restriction.
visibility = [
":dns",
":host_resolver_impl",
":mdns_client",
"//net",
]
# Whitelist-only access so we can keep track of all usage external to the
# network stack and network service.
friend = [
# chrome/browser/devtools/device/tcp_device_provider.cc
# TODO(crbug.com/874653): Remove once migrated to network service IPC.
#
# chrome/browser/devtools/device/port_forwarding_controller.cc
# TODO(crbug.com/874651): Remove once migrated to network service IPC.
"//chrome/browser/devtools",
# chrome/browser/io_thread.cc
# Used to build in-process HostResolver when network service disabled.
#
# chrome/browser/net/dns_probe_service.cc
# TODO(crbug.com/874660): Remove once migrated to network service IPC.
#
# chrome/browser/net/url_info.h
# chrome/browser/net_benchmarking.cc
# HostResolver only used for deprecated net::Predictor.
# TODO(crbug.com/875238): Remove once deprecated code is removed.
"//chrome/browser",
# chrome/browser/ui/webui/net_internals/net_internals_ui.cc
# TODO(crbug.com/876110): Remove once migrated to network service IPC.
"//chrome/browser/ui",
# chromecast/browser/url_request_context_factory.cc
# URLRequestContext creation for chromecast.
"//chromecast/browser",
# components/network_hints/browser/network_hints_message_filter.cc
# TODO(crbug.com/874654): Remove once migrated to network service IPC.
"//components/network_hints/browser",
# content/public/browser/resource_hints.h
# Deprecated and soon to be removed.
# TODO(crbug.com/875238): Remove once code is removed.
"//content/public/browser:browser_sources",
# headless/lib/browser/headless_url_request_context_getter.cc
# URLRequestContext creation for headless.
"//headless",
# URLRequestContext and HttpNetworkSession::Context creation for iOS.
"//ios/components/io_thread",
"//ios/web/shell",
"//ios/web_view:*",
# Tests and test support.
"//chrome/browser:test_support",
"//chrome/test:browser_tests",
"//components/grpc_support/test:unit_tests",
"//content/shell:content_shell_lib",
# Stand-alone tools.
"//components/sync/tools:*",
"//google_apis/gcm:mcs_probe",
# Network stack/service.
"//components/certificate_transparency/*",
"//components/cronet/*",
"//net/*",
"//services/network/*",
]
sources = []
public = []
if (!is_nacl) {
sources += [
"dns_config.h",
"host_cache.h",
"host_resolver.h",
"mapped_host_resolver.h",
]
}
deps = [
"//net:net_deps",
]
public_deps = [
"//net:net_public_deps",
]
}
# Overridable implementation details of HostResolver.
# TODO(crbug.com/846423): Servicify or remove external usage.
source_set("host_resolver_impl") {
# Due to circular dependencies, should only be depended on through //net.
# Limit visibility to //net and other source_sets with the same access
# restriction.
visibility = [
":dns",
"//net",
]
# Whitelist-only access so we can keep track of all usage external to the
# network stack.
friend = [
"//chromeos",
"//components/cronet/*",
"//net/*",
]
sources = []
public = []
if (!is_nacl) {
sources += [ "host_resolver_impl.h" ]
if (is_posix || is_fuchsia) {
sources += [ "dns_config_service_posix.h" ]
}
}
deps = [
":host_resolver",
"//net:net_deps",
]
public_deps = [
"//net:net_public_deps",
]
}
# DnsClient interfaces. Primarily intended as part of the impelementation of the
# standard HostResolver interface, but can be used as an alternative external
# interface for advanced usage.
# TODO(crbug.com/846423): Figure out what we want to do with these for
# servicification.
source_set("dns_client") {
# Due to circular dependencies, should only be depended on through //net.
# Limit visibility to //net and other source_sets with the same access
# restriction.
visibility = [
":dns",
":mdns_client",
"//net",
]
# Whitelist-only access so we can keep track of all usage external to the
# network stack.
friend = [
"//chrome/browser",
"//chrome/browser:test_support",
"//chrome/browser/chromeos",
"//chrome/test/*",
"//components/certificate_transparency/*",
"//net/*",
"//services/network/*",
]
sources = []
public = []
if (!is_nacl) {
sources += [
"dns_client.h",
"dns_protocol.h",
"dns_response.h",
"dns_transaction.h",
"record_parsed.h",
"record_rdata.h",
]
}
deps = [
"//net:net_deps",
]
public_deps = [
"//net:net_public_deps",
]
}
# MdnsClient interfaces.
# TODO(crbug.com/846423): Figure out what we want to do with these for
# servicification.
source_set("mdns_client") {
# Due to circular dependencies, should only be depended on through //net.
# Limit visibility to //net and other source_sets with the same access
# restriction.
visibility = [
":dns",
"//net",
]
# Whitelist-only access so we can keep track of all usage external to the
# network stack.
friend = [
"//chrome/browser",
"//chrome/browser:test_support",
"//chrome/browser/chromeos",
"//chrome/tools/service_discovery_sniffer",
"//net/*",
]
public = []
sources = []
if (!is_nacl && enable_mdns) {
sources += [ "mdns_client.h" ]
}
deps = [
":dns_client",
":host_resolver",
"//net:net_deps",
]
public_deps = [
"//net:net_public_deps",
]
}
if (enable_net_mojo) {
# A host resolver implementation that forwards resolve requests to a mojo
# service, thus acting as a client library to a servicified host resolver.
# TODO(crbug.com/821021): Decide if this has any place in the generalized
# host resolver servicification.
source_set("mojo_client") {
sources = [
"host_resolver_mojo.cc",
"host_resolver_mojo.h",
]
deps = [
"//base",
"//net",
]
public_deps = [
"//mojo/public/cpp/bindings",
"//net/interfaces",
]
}
# A utility to handle host resolver requests coming into the network service
# via mojo and pass the requests on to the actual host resolver. This utility
# therefore acts as the service side of mojo interactions for host resolver.
# TODO(crbug.com/821021): Decide if this has any place in the generalized
# host resolver servicification.
source_set("mojo_service") {
sources = [
"mojo_host_resolver_impl.cc",
"mojo_host_resolver_impl.h",
]
deps = [
"//base",
"//net",
]
public_deps = [
"//mojo/public/cpp/bindings",
"//net/interfaces",
]
}
}
source_set("tests") {
testonly = true
sources = [
"dns_config_service_unittest.cc",
"dns_config_service_win_unittest.cc",
"dns_hosts_unittest.cc",
"dns_query_unittest.cc",
"dns_response_unittest.cc",
"dns_session_unittest.cc",
"dns_socket_pool_unittest.cc",
"dns_transaction_unittest.cc",
"dns_util_unittest.cc",
"host_cache_unittest.cc",
"host_resolver_impl_unittest.cc",
"mapped_host_resolver_unittest.cc",
"record_parsed_unittest.cc",
"record_rdata_unittest.cc",
"serial_worker_unittest.cc",
]
if (is_posix || is_fuchsia) {
sources += [ "dns_config_service_posix_unittest.cc" ]
}
if (enable_built_in_dns) {
sources += [ "address_sorter_unittest.cc" ]
if (is_posix || is_fuchsia) {
sources += [ "address_sorter_posix_unittest.cc" ]
}
}
if (enable_net_mojo) {
sources += [
"host_resolver_mojo_unittest.cc",
"mojo_host_resolver_impl_unittest.cc",
]
}
if (enable_mdns) {
sources += [
"mdns_cache_unittest.cc",
"mdns_client_unittest.cc",
]
}
deps = [
"//base",
"//net",
"//net:test_support",
"//testing/gmock",
"//testing/gtest",
]
if (enable_net_mojo) {
deps += [
"//net/dns:mojo_client",
"//net/dns:mojo_service",
]
}
}
source_set("test_support") {
testonly = true
sources = [
"dns_test_util.cc",
"mock_host_resolver.cc",
]
public = [
"dns_test_util.h",
"mock_host_resolver.h",
]
if (enable_mdns) {
sources += [
"mock_mdns_client.cc",
"mock_mdns_socket_factory.cc",
]
public += [
"mock_mdns_client.h",
"mock_mdns_socket_factory.h",
]
}
deps = [
"//base",
"//net",
"//testing/gmock",
"//testing/gtest",
]
}
source_set("fuzzer_test_support") {
testonly = true
sources = [
"fuzzed_host_resolver.cc",
"fuzzed_host_resolver.h",
]
deps = [
"//base",
"//base/test:test_support",
"//net",
]
}
fuzzer_test("net_dns_hosts_parse_fuzzer") {
sources = [
"dns_hosts_parse_fuzzer.cc",
]
deps = [
"//base",
"//net",
"//net:net_fuzzer_test_support",
]
dict = "//net/data/fuzzer_dictionaries/net_dns_hosts_parse_fuzzer.dict"
}
fuzzer_test("net_dns_record_fuzzer") {
sources = [
"dns_record_fuzzer.cc",
]
deps = [
"//base",
"//net",
"//net:net_fuzzer_test_support",
]
dict = "//net/data/fuzzer_dictionaries/net_dns_record_fuzzer.dict"
}
fuzzer_test("net_dns_query_parse_fuzzer") {
sources = [
"dns_query_parse_fuzzer.cc",
]
deps = [
"//base",
"//net",
"//net:net_fuzzer_test_support",
]
dict = "//net/data/fuzzer_dictionaries/net_dns_record_fuzzer.dict"
}
fuzzer_test("net_dns_response_fuzzer") {
sources = [
"dns_response_fuzzer.cc",
]
deps = [
"//base",
"//net",
"//net:net_fuzzer_test_support",
]
dict = "//net/data/fuzzer_dictionaries/net_dns_record_fuzzer.dict"
}
fuzzer_test("net_host_resolver_impl_fuzzer") {
sources = [
"host_resolver_impl_fuzzer.cc",
]
deps = [
"//base",
"//net",
"//net:net_fuzzer_test_support",
"//net:test_support",
]
dict = "//net/data/fuzzer_dictionaries/net_host_resolver_impl_fuzzer.dict"
}