diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 776a889b6af35..16781e0ec7862 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -6820,7 +6820,7 @@ const FeatureEntry kFeatureEntries[] = { #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) {"enable-async-dns", flag_descriptions::kAsyncDnsName, flag_descriptions::kAsyncDnsDescription, kOsWin | kOsLinux, - FEATURE_VALUE_TYPE(features::kAsyncDns)}, + FEATURE_VALUE_TYPE(net::features::kAsyncDns)}, #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) {"downloads-migrate-to-jobs-api", diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc index 7bda17997d611..a1808c0403ada 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc @@ -32,6 +32,7 @@ #include "content/public/common/content_switches.h" #include "content/public/test/browser_test.h" #include "extensions/browser/api_test_utils.h" +#include "net/base/features.h" #include "net/cert/x509_certificate.h" #include "net/cert/x509_util.h" #include "net/ssl/client_cert_identity_test_util.h" @@ -162,7 +163,7 @@ class EnterpriseReportingPrivateGetContextInfoBrowserTest if (browser_managed()) { SetupDMToken(); } - feature_list_.InitAndEnableFeature(features::kAsyncDns); + feature_list_.InitAndEnableFeature(net::features::kAsyncDns); } bool browser_managed() const { return testing::get<0>(GetParam()); } diff --git a/chrome/browser/net/stub_resolver_config_reader.cc b/chrome/browser/net/stub_resolver_config_reader.cc index 5db4a089afbac..7f470a241d616 100644 --- a/chrome/browser/net/stub_resolver_config_reader.cc +++ b/chrome/browser/net/stub_resolver_config_reader.cc @@ -31,6 +31,7 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "content/public/browser/network_service_instance.h" +#include "net/base/features.h" #include "net/dns/public/dns_over_https_config.h" #include "net/dns/public/secure_dns_mode.h" #include "net/dns/public/util.h" @@ -92,13 +93,13 @@ bool ShouldDisableDohForWindowsParentalControls() { bool ShouldEnableAsyncDns() { bool feature_can_be_enabled = true; #if BUILDFLAG(IS_ANDROID) - int min_sdk = - base::GetFieldTrialParamByFeatureAsInt(features::kAsyncDns, "min_sdk", 0); + int min_sdk = base::GetFieldTrialParamByFeatureAsInt(net::features::kAsyncDns, + "min_sdk", 0); if (base::android::BuildInfo::GetInstance()->sdk_int() < min_sdk) feature_can_be_enabled = false; #endif return feature_can_be_enabled && - base::FeatureList::IsEnabled(features::kAsyncDns); + base::FeatureList::IsEnabled(net::features::kAsyncDns); } } // namespace diff --git a/chrome/browser/net/stub_resolver_config_reader_browsertest.cc b/chrome/browser/net/stub_resolver_config_reader_browsertest.cc index c2a53c949f86f..64a174e277029 100644 --- a/chrome/browser/net/stub_resolver_config_reader_browsertest.cc +++ b/chrome/browser/net/stub_resolver_config_reader_browsertest.cc @@ -26,6 +26,7 @@ #include "components/policy/policy_constants.h" #include "components/prefs/pref_service.h" #include "content/public/test/browser_test.h" +#include "net/base/features.h" #include "net/dns/public/secure_dns_mode.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -45,7 +46,8 @@ class StubResolverConfigReaderBrowsertest public testing::WithParamInterface<bool> { public: StubResolverConfigReaderBrowsertest() { - scoped_feature_list_.InitWithFeatureState(features::kAsyncDns, GetParam()); + scoped_feature_list_.InitWithFeatureState(net::features::kAsyncDns, + GetParam()); } ~StubResolverConfigReaderBrowsertest() override = default; diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 3a31ef163f10b..3af87ca036952 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc @@ -74,17 +74,6 @@ BASE_FEATURE(kAppShimNotificationAttribution, base::FEATURE_DISABLED_BY_DEFAULT); #endif // BUILDFLAG(IS_MAC) -// Enables the built-in DNS resolver. -BASE_FEATURE(kAsyncDns, - "AsyncDns", -#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) || \ - BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) - base::FEATURE_ENABLED_BY_DEFAULT -#else - base::FEATURE_DISABLED_BY_DEFAULT -#endif -); - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FUCHSIA) // Enables or disables the Autofill survey triggered by opening a prompt to diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 05f6e0b621f02..460d84c68055d 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h @@ -57,8 +57,6 @@ COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kAppShimNotificationAttribution); #endif // BUILDFLAG(IS_MAC) -COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kAsyncDns); - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FUCHSIA) COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kAutofillAddressSurvey); diff --git a/content/public/test/content_browser_test_content_browser_client.cc b/content/public/test/content_browser_test_content_browser_client.cc index 13fb49c0e373c..a6d58e47ec2d7 100644 --- a/content/public/test/content_browser_test_content_browser_client.cc +++ b/content/public/test/content_browser_test_content_browser_client.cc @@ -39,4 +39,12 @@ bool ContentBrowserTestContentBrowserClient::CreateThreadPool( return true; } +void ContentBrowserTestContentBrowserClient::OnNetworkServiceCreated( + network::mojom::NetworkService* network_service) { + // Override ShellContentBrowserClient::OnNetworkServiceCreated() not to call + // NetworkService::ConfigureStubHostResolver(), because some tests are flaky + // when configuring the stub host resolver. + // TODO(crbug.com/1521190): Remove this override once the flakiness is fixed. +} + } // namespace content diff --git a/content/public/test/content_browser_test_content_browser_client.h b/content/public/test/content_browser_test_content_browser_client.h index a458158610ffb..833e9f3a7714c 100644 --- a/content/public/test/content_browser_test_content_browser_client.h +++ b/content/public/test/content_browser_test_content_browser_client.h @@ -20,6 +20,8 @@ class ContentBrowserTestContentBrowserClient ~ContentBrowserTestContentBrowserClient() override; bool CreateThreadPool(base::StringPiece name) override; + void OnNetworkServiceCreated( + network::mojom::NetworkService* network_service) override; }; } // namespace content diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc index 12c75370f692d..47bb57c852000 100644 --- a/content/shell/browser/shell_content_browser_client.cc +++ b/content/shell/browser/shell_content_browser_client.cc @@ -77,6 +77,9 @@ #include "media/mojo/mojom/media_service.mojom.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "net/base/features.h" +#include "net/dns/public/dns_over_https_config.h" +#include "net/dns/public/secure_dns_mode.h" #include "net/ssl/client_cert_identity.h" #include "services/device/public/cpp/geolocation/location_system_permission_status.h" #include "services/network/public/cpp/features.h" @@ -705,6 +708,25 @@ void ShellContentBrowserClient::GetAdditionalMappedFilesForChildProcess( #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || // BUILDFLAG(IS_ANDROID) +// Note that ShellContentBrowserClient overrides this method to work around +// test flakiness that happens when NetworkService::SetTestDohConfigForTesting() +// is used. +// TODO(crbug.com/1521190): Remove that override once the flakiness is fixed. +void ShellContentBrowserClient::OnNetworkServiceCreated( + network::mojom::NetworkService* network_service) { + // TODO(bashi): Consider enabling this for Android. Excluded because the + // built-in resolver may not work on older SDK versions. +#if !BUILDFLAG(IS_ANDROID) + if (base::FeatureList::IsEnabled(net::features::kAsyncDns)) { + network_service->ConfigureStubHostResolver( + /*insecure_dns_client_enabled=*/true, + /*secure_dns_mode=*/net::SecureDnsMode::kAutomatic, + net::DnsOverHttpsConfig(), + /*additional_dns_types_enabled=*/true); + } +#endif +} + void ShellContentBrowserClient::ConfigureNetworkContextParams( BrowserContext* context, bool in_memory, diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h index 031fde6829493..b320f8a33bb03 100644 --- a/content/shell/browser/shell_content_browser_client.h +++ b/content/shell/browser/shell_content_browser_client.h @@ -143,6 +143,8 @@ class ShellContentBrowserClient : public ContentBrowserClient { #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || // BUILDFLAG(IS_ANDROID) device::GeolocationManager* GetGeolocationManager() override; + void OnNetworkServiceCreated( + network::mojom::NetworkService* network_service) override; void ConfigureNetworkContextParams( BrowserContext* context, bool in_memory, diff --git a/net/base/features.cc b/net/base/features.cc index ac16df9d82d34..d32a92622ec28 100644 --- a/net/base/features.cc +++ b/net/base/features.cc @@ -23,6 +23,16 @@ BASE_FEATURE(kCapReferrerToOriginOnCrossOrigin, "CapReferrerToOriginOnCrossOrigin", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kAsyncDns, + "AsyncDns", +#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_ANDROID) || \ + BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) + base::FEATURE_ENABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif +); + BASE_FEATURE(kDnsTransactionDynamicTimeouts, "DnsTransactionDynamicTimeouts", base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/net/base/features.h b/net/base/features.h index 6a645c1de9af2..680b5abd8bbe9 100644 --- a/net/base/features.h +++ b/net/base/features.h @@ -30,6 +30,9 @@ NET_EXPORT BASE_DECLARE_FEATURE(kAvoidH2Reprioritization); // origin requests are restricted to contain at most the source origin. NET_EXPORT BASE_DECLARE_FEATURE(kCapReferrerToOriginOnCrossOrigin); +// Enables the built-in DNS resolver. +NET_EXPORT BASE_DECLARE_FEATURE(kAsyncDns); + // Support for altering the parameters used for DNS transaction timeout. See // ResolveContext::SecureTransactionTimeout(). NET_EXPORT BASE_DECLARE_FEATURE(kDnsTransactionDynamicTimeouts);