0

Reland: "Allow content shell to enable the built-in DNS resolver"

The original CL (https://crrev.com/c/5224044) was reverted because
it made some tests flaky. The diff from the original CL is not to
call NetworkService::ConfigureStubHostResolver() when running
browser_tests to work around the flakiness.

Not that the following original commit message is outdated because
this CL isn't useful to write browser_tests any longer (but it's
useful for running content_shell).

[Original commit message]
> Allow content shell to enable the built-in DNS resolver
>
> It's useful for local testing and writing browser_tests in //content.
>
> Move the feature flag from //chrome to //net so that
> ShellContentBrowserClient can use it to determine using the built-in
> DNS resolver.

Bug: chromium:1521190
Change-Id: Ic02c1a69f5f302aaa346654393579946b9053de4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5232354
Reviewed-by: Tsuyoshi Horo <horo@chromium.org>
Reviewed-by: Julian Pastarmov <pastarmovj@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1253657}
This commit is contained in:
Kenichi Ishibashi
2024-01-30 00:37:39 +00:00
committed by Chromium LUCI CQ
parent c0d9f74c09
commit 696c6dec44
12 changed files with 57 additions and 19 deletions

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

@ -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()); }

@ -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

@ -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;

@ -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

@ -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);

@ -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

@ -20,6 +20,8 @@ class ContentBrowserTestContentBrowserClient
~ContentBrowserTestContentBrowserClient() override;
bool CreateThreadPool(base::StringPiece name) override;
void OnNetworkServiceCreated(
network::mojom::NetworkService* network_service) override;
};
} // namespace content

@ -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,

@ -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,

@ -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);

@ -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);