# 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_service.cc", "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_proc.cc", "host_resolver_proc.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_impl", ":mdns_client", ":public", "//net:net_public_deps", ] allow_circular_includes_from = [ ":dns_client", ":host_resolver_impl", ":mdns_client", ":public", ] } # The standard public API of net/dns. Available for use both inside and outside # the network stack by any code that needs it. # TODO(crbug.com/821021): Servicify and convert all non-constant external usage # to IPCs. source_set("public") { # 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", ":dns_client", ":host_resolver_impl", ":mdns_client", "//net", ] sources = [] public = [] if (!is_nacl) { public += [ "dns_config_service.h", "dns_protocol.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", ":public", "//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 = [ ":public", "//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/*", ] sources = [] public = [] if (!is_nacl) { sources += [ "dns_client.h", "dns_response.h", "dns_transaction.h", "record_parsed.h", "record_rdata.h", ] } deps = [ ":public", "//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", ":public", "//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", "//net:net_with_v8", ] 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_socket_factory.cc" ] public += [ "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_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" }