Commit 9690e084 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

Reland "Convert dns_api.cc to mojo host resolver"

This is a reland of dccf844a

This was reverted because NetworkContextConfigurationBrowserTests
were failing on Mac due to crbug.com/843324. This is because those
tests call AddSimulatedFailure() on the host resolver, which now
sends those rules to NetworkServiceTest (which doesn't work on Mac).
I disabled the NetworkContextConfigurationBrowserTests on Mac that
run with network service enabled.

Original change's description:
> Convert dns_api.cc to mojo host resolver
>
> Bug: 874658
> Cq-Include-Trybots: luci.chromium.try:linux_mojo
> Change-Id: I576d2877ec71df8e489d349916f758ba6fe74263
> Reviewed-on: https://chromium-review.googlesource.com/1176725
> Reviewed-by: Will Harris <wfh@chromium.org>
> Reviewed-by: John Abd-El-Malek <jam@chromium.org>
> Commit-Queue: Clark DuVall <cduvall@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#583878}

TBR=wfh@chromium.org,jam@chromium.org

Bug: 874658
Change-Id: Ib26c612a450a48818a10f817bd2d309292d4c9ea
Cq-Include-Trybots: luci.chromium.try:linux_mojo
Reviewed-on: https://chromium-review.googlesource.com/1179922Reviewed-by: default avatarClark DuVall <cduvall@chromium.org>
Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584122}
parent 5c7ba649
...@@ -404,9 +404,7 @@ class NetworkContextConfigurationBrowserTest ...@@ -404,9 +404,7 @@ class NetworkContextConfigurationBrowserTest
ASSERT_TRUE(simple_loader_helper.response_body()); ASSERT_TRUE(simple_loader_helper.response_body());
EXPECT_EQ(*simple_loader_helper.response_body(), "Echo"); EXPECT_EQ(*simple_loader_helper.response_body(), "Echo");
} else { } else {
// TestHostResolver returns net::ERR_NOT_IMPLEMENTED for non-local host EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, simple_loader->NetError());
// URLs.
EXPECT_EQ(net::ERR_NOT_IMPLEMENTED, simple_loader->NetError());
ASSERT_FALSE(simple_loader_helper.response_body()); ASSERT_FALSE(simple_loader_helper.response_body());
} }
} }
...@@ -1213,16 +1211,7 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationBrowserTest, ...@@ -1213,16 +1211,7 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationBrowserTest,
EXPECT_FALSE(GetCookies(embedded_test_server()->base_url()).empty()); EXPECT_FALSE(GetCookies(embedded_test_server()->base_url()).empty());
} }
#if defined(OS_MACOSX) IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationBrowserTest, CookiesEnabled) {
// Disable the test on Mac OSX since it fails on the bot.
// (https://crbug.com/847555)
#define MAYBE_CookiesEnabled DISABLED_CookiesEnabled
#else
#define MAYBE_CookiesEnabled CookiesEnabled
#endif
IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationBrowserTest,
MAYBE_CookiesEnabled) {
// Check that the cookie from the first stage of the test was / was not // Check that the cookie from the first stage of the test was / was not
// preserved between browser restarts, as expected. // preserved between browser restarts, as expected.
bool has_cookies = !GetCookies(embedded_test_server()->base_url()).empty(); bool has_cookies = !GetCookies(embedded_test_server()->base_url()).empty();
...@@ -1681,7 +1670,7 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationHttpsStrippingPacBrowserTest, ...@@ -1681,7 +1670,7 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationHttpsStrippingPacBrowserTest,
} }
// |NetworkServiceTestHelper| doesn't work on browser_tests on OSX. // |NetworkServiceTestHelper| doesn't work on browser_tests on OSX.
// See https://crbug.com/757088 // See https://crbug.com/843324
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
#if BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_EXTENSIONS)
...@@ -1689,23 +1678,17 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationHttpsStrippingPacBrowserTest, ...@@ -1689,23 +1678,17 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationHttpsStrippingPacBrowserTest,
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
OnDiskApp, TestFixture, \ OnDiskApp, TestFixture, \
::testing::Values(TestCase({NetworkServiceState::kDisabled, \ ::testing::Values(TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kOnDiskApp}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kOnDiskApp}))); \ NetworkContextType::kOnDiskApp}))); \
\ \
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
InMemoryApp, TestFixture, \ InMemoryApp, TestFixture, \
::testing::Values(TestCase({NetworkServiceState::kDisabled, \ ::testing::Values(TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kInMemoryApp}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kInMemoryApp}))); \ NetworkContextType::kInMemoryApp}))); \
\ \
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
OnDiskAppWithIncognitoProfile, TestFixture, \ OnDiskAppWithIncognitoProfile, TestFixture, \
::testing::Values( \ ::testing::Values( \
TestCase({NetworkServiceState::kDisabled, \ TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kOnDiskAppWithIncognitoProfile}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kOnDiskAppWithIncognitoProfile}))); NetworkContextType::kOnDiskAppWithIncognitoProfile})));
#else // !BUILDFLAG(ENABLE_EXTENSIONS) #else // !BUILDFLAG(ENABLE_EXTENSIONS)
#define INSTANTIATE_EXTENSION_TESTS(TestFixture) #define INSTANTIATE_EXTENSION_TESTS(TestFixture)
...@@ -1719,29 +1702,21 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationHttpsStrippingPacBrowserTest, ...@@ -1719,29 +1702,21 @@ IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationHttpsStrippingPacBrowserTest,
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
SystemNetworkContext, TestFixture, \ SystemNetworkContext, TestFixture, \
::testing::Values(TestCase({NetworkServiceState::kDisabled, \ ::testing::Values(TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kSystem}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kSystem}))); \ NetworkContextType::kSystem}))); \
\ \
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
SafeBrowsingNetworkContext, TestFixture, \ SafeBrowsingNetworkContext, TestFixture, \
::testing::Values(TestCase({NetworkServiceState::kDisabled, \ ::testing::Values(TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kSafeBrowsing}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kSystem}))); \ NetworkContextType::kSystem}))); \
\ \
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
ProfileMainNetworkContext, TestFixture, \ ProfileMainNetworkContext, TestFixture, \
::testing::Values(TestCase({NetworkServiceState::kDisabled, \ ::testing::Values(TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kProfile}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kProfile}))); \ NetworkContextType::kProfile}))); \
\ \
INSTANTIATE_TEST_CASE_P( \ INSTANTIATE_TEST_CASE_P( \
IncognitoProfileMainNetworkContext, TestFixture, \ IncognitoProfileMainNetworkContext, TestFixture, \
::testing::Values(TestCase({NetworkServiceState::kDisabled, \ ::testing::Values(TestCase({NetworkServiceState::kDisabled, \
NetworkContextType::kIncognitoProfile}), \
TestCase({NetworkServiceState::kEnabled, \
NetworkContextType::kIncognitoProfile}))) NetworkContextType::kIncognitoProfile})))
#else // !defined(OS_MACOSX) #else // !defined(OS_MACOSX)
// Instiates tests with a prefix indicating which NetworkContext is being // Instiates tests with a prefix indicating which NetworkContext is being
......
...@@ -492,6 +492,20 @@ void BrowserTestBase::InitializeNetworkProcess() { ...@@ -492,6 +492,20 @@ void BrowserTestBase::InitializeNetworkProcess() {
// For now, this covers all the rules used in content's tests. // For now, this covers all the rules used in content's tests.
// TODO(jam: expand this when we try to make browser_tests and // TODO(jam: expand this when we try to make browser_tests and
// components_browsertests work. // components_browsertests work.
if (rule.resolver_type ==
net::RuleBasedHostResolverProc::Rule::kResolverTypeFail) {
// The host "wpad" is added automatically in TestHostResolver, so we don't
// need to send it to NetworkServiceTest.
if (rule.host_pattern != "wpad") {
network::mojom::RulePtr mojo_rule = network::mojom::Rule::New();
mojo_rule->resolver_type =
network::mojom::ResolverType::kResolverTypeFail;
mojo_rule->host_pattern = rule.host_pattern;
mojo_rules.push_back(std::move(mojo_rule));
}
continue;
}
if ((rule.resolver_type != if ((rule.resolver_type !=
net::RuleBasedHostResolverProc::Rule::kResolverTypeSystem && net::RuleBasedHostResolverProc::Rule::kResolverTypeSystem &&
rule.resolver_type != rule.resolver_type !=
...@@ -500,6 +514,14 @@ void BrowserTestBase::InitializeNetworkProcess() { ...@@ -500,6 +514,14 @@ void BrowserTestBase::InitializeNetworkProcess() {
!!rule.latency_ms || rule.replacement.empty()) !!rule.latency_ms || rule.replacement.empty())
continue; continue;
network::mojom::RulePtr mojo_rule = network::mojom::Rule::New(); network::mojom::RulePtr mojo_rule = network::mojom::Rule::New();
if (rule.resolver_type ==
net::RuleBasedHostResolverProc::Rule::kResolverTypeSystem) {
mojo_rule->resolver_type =
network::mojom::ResolverType::kResolverTypeSystem;
} else {
mojo_rule->resolver_type =
network::mojom::ResolverType::kResolverTypeIPLiteral;
}
mojo_rule->host_pattern = rule.host_pattern; mojo_rule->host_pattern = rule.host_pattern;
mojo_rule->replacement = rule.replacement; mojo_rule->replacement = rule.replacement;
mojo_rules.push_back(std::move(mojo_rule)); mojo_rules.push_back(std::move(mojo_rule));
......
...@@ -40,6 +40,19 @@ ...@@ -40,6 +40,19 @@
namespace content { namespace content {
namespace { namespace {
#define STATIC_ASSERT_ENUM(a, b) \
static_assert(static_cast<int>(a) == static_cast<int>(b), \
"mismatching enums: " #a)
STATIC_ASSERT_ENUM(network::mojom::ResolverType::kResolverTypeFail,
net::RuleBasedHostResolverProc::Rule::kResolverTypeFail);
STATIC_ASSERT_ENUM(network::mojom::ResolverType::kResolverTypeSystem,
net::RuleBasedHostResolverProc::Rule::kResolverTypeSystem);
STATIC_ASSERT_ENUM(
network::mojom::ResolverType::kResolverTypeIPLiteral,
net::RuleBasedHostResolverProc::Rule::kResolverTypeIPLiteral);
void CrashResolveHost(const std::string& host_to_crash, void CrashResolveHost(const std::string& host_to_crash,
const std::string& host) { const std::string& host) {
if (host_to_crash == host) if (host_to_crash == host)
...@@ -68,8 +81,14 @@ class NetworkServiceTestHelper::NetworkServiceTestImpl ...@@ -68,8 +81,14 @@ class NetworkServiceTestHelper::NetworkServiceTestImpl
void AddRules(std::vector<network::mojom::RulePtr> rules, void AddRules(std::vector<network::mojom::RulePtr> rules,
AddRulesCallback callback) override { AddRulesCallback callback) override {
for (const auto& rule : rules) { for (const auto& rule : rules) {
test_host_resolver_.host_resolver()->AddRule(rule->host_pattern, if (rule->resolver_type ==
rule->replacement); network::mojom::ResolverType::kResolverTypeFail) {
test_host_resolver_.host_resolver()->AddSimulatedFailure(
rule->host_pattern);
} else {
test_host_resolver_.host_resolver()->AddRule(rule->host_pattern,
rule->replacement);
}
} }
std::move(callback).Run(); std::move(callback).Run();
} }
......
...@@ -13,9 +13,6 @@ ...@@ -13,9 +13,6 @@
#include "extensions/common/api/dns.h" #include "extensions/common/api/dns.h"
#include "net/base/host_port_pair.h" #include "net/base/host_port_pair.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/log/net_log_with_source.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
using content::BrowserThread; using content::BrowserThread;
using extensions::api::dns::ResolveCallbackResolveInfo; using extensions::api::dns::ResolveCallbackResolveInfo;
...@@ -24,79 +21,51 @@ namespace Resolve = extensions::api::dns::Resolve; ...@@ -24,79 +21,51 @@ namespace Resolve = extensions::api::dns::Resolve;
namespace extensions { namespace extensions {
DnsResolveFunction::DnsResolveFunction() DnsResolveFunction::DnsResolveFunction() : binding_(this) {}
: response_(false), addresses_(new net::AddressList) {}
DnsResolveFunction::~DnsResolveFunction() {} DnsResolveFunction::~DnsResolveFunction() {}
ExtensionFunction::ResponseAction DnsResolveFunction::Run() { ExtensionFunction::ResponseAction DnsResolveFunction::Run() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
std::unique_ptr<Resolve::Params> params(Resolve::Params::Create(*args_)); std::unique_ptr<Resolve::Params> params(Resolve::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get()); EXTENSION_FUNCTION_VALIDATE(params.get());
hostname_ = params->hostname; network::mojom::ResolveHostClientPtr client_ptr;
url_request_context_getter_ = binding_.Bind(mojo::MakeRequest(&client_ptr));
content::BrowserContext::GetDefaultStoragePartition(browser_context()) binding_.set_connection_error_handler(
->GetURLRequestContext(); base::BindOnce(&DnsResolveFunction::OnComplete, base::Unretained(this),
net::ERR_FAILED, base::nullopt));
bool result = BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
base::Bind(&DnsResolveFunction::WorkOnIOThread, this));
DCHECK(result);
return RespondLater();
}
void DnsResolveFunction::WorkOnIOThread() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
net::HostResolver* host_resolver =
HostResolverWrapper::GetInstance()->GetHostResolver(
url_request_context_getter_.get());
DCHECK(host_resolver);
// Yes, we are passing zero as the port. There are some interesting but not // Yes, we are passing zero as the port. There are some interesting but not
// presently relevant reasons why HostResolver asks for the port of the // presently relevant reasons why HostResolver asks for the port of the
// hostname you'd like to resolve, even though it doesn't use that value in // hostname you'd like to resolve, even though it doesn't use that value in
// determining its answer. // determining its answer.
net::HostPortPair host_port_pair(hostname_, 0); net::HostPortPair host_port_pair(params->hostname, 0);
content::BrowserContext::GetDefaultStoragePartition(browser_context())
net::HostResolver::RequestInfo request_info(host_port_pair); ->GetNetworkContext()
int resolve_result = host_resolver->Resolve( ->ResolveHost(host_port_pair, nullptr, std::move(client_ptr));
request_info, net::DEFAULT_PRIORITY, addresses_.get(),
base::Bind(&DnsResolveFunction::OnLookupFinished, this), &request_,
net::NetLogWithSource());
// Balanced in OnLookupFinished. // Balanced in OnComplete().
AddRef(); AddRef();
return RespondLater();
if (resolve_result != net::ERR_IO_PENDING)
OnLookupFinished(resolve_result);
} }
void DnsResolveFunction::RespondOnUIThread( void DnsResolveFunction::OnComplete(
std::unique_ptr<base::ListValue> results) { int result,
const base::Optional<net::AddressList>& resolved_addresses) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
Respond(response_ ? ArgumentList(std::move(results)) binding_.Close();
: Error(kUnknownErrorDoNotUse));
} ResolveCallbackResolveInfo resolve_info;
resolve_info.result_code = result;
void DnsResolveFunction::OnLookupFinished(int resolve_result) { if (result == net::OK) {
auto resolve_info = std::make_unique<ResolveCallbackResolveInfo>(); DCHECK(resolved_addresses.has_value() && !resolved_addresses->empty());
resolve_info->result_code = resolve_result; resolve_info.address = std::make_unique<std::string>(
if (resolve_result == net::OK) { resolved_addresses->front().ToStringWithoutPort());
DCHECK(!addresses_->empty());
resolve_info->address.reset(
new std::string(addresses_->front().ToStringWithoutPort()));
} }
response_ = true;
bool post_task_result = BrowserThread::PostTask( Respond(ArgumentList(Resolve::Results::Create(resolve_info)));
BrowserThread::UI, FROM_HERE,
base::BindOnce(&DnsResolveFunction::RespondOnUIThread, this,
Resolve::Results::Create(*resolve_info)));
DCHECK(post_task_result);
Release(); // Added in WorkOnIOThread(). Release(); // Added in Run().
} }
} // namespace extensions } // namespace extensions
...@@ -8,17 +8,16 @@ ...@@ -8,17 +8,16 @@
#include <string> #include <string>
#include "extensions/browser/extension_function.h" #include "extensions/browser/extension_function.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "net/base/address_list.h" #include "net/base/address_list.h"
#include "net/base/completion_callback.h" #include "net/base/completion_callback.h"
#include "net/dns/host_resolver.h" #include "net/dns/host_resolver.h"
#include "services/network/public/mojom/network_context.mojom.h"
namespace net {
class URLRequestContextGetter;
}
namespace extensions { namespace extensions {
class DnsResolveFunction : public UIThreadExtensionFunction { class DnsResolveFunction : public UIThreadExtensionFunction,
public network::mojom::ResolveHostClient {
public: public:
DECLARE_EXTENSION_FUNCTION("dns.resolve", DNS_RESOLVE) DECLARE_EXTENSION_FUNCTION("dns.resolve", DNS_RESOLVE)
...@@ -31,19 +30,14 @@ class DnsResolveFunction : public UIThreadExtensionFunction { ...@@ -31,19 +30,14 @@ class DnsResolveFunction : public UIThreadExtensionFunction {
ResponseAction Run() override; ResponseAction Run() override;
private: private:
void WorkOnIOThread(); // network::mojom::ResolveHostClient implementation:
void RespondOnUIThread(std::unique_ptr<base::ListValue> results); void OnComplete(
int result,
void OnLookupFinished(int result); const base::Optional<net::AddressList>& resolved_addresses) override;
std::string hostname_; // A reference to |this| must be taken while the request is being made on this
// binding so the object is alive when the request completes.
scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; mojo::Binding<network::mojom::ResolveHostClient> binding_;
bool response_; // The value sent in SendResponse().
std::unique_ptr<net::HostResolver::Request> request_;
std::unique_ptr<net::AddressList> addresses_;
}; };
} // namespace extensions } // namespace extensions
......
...@@ -9,40 +9,29 @@ ...@@ -9,40 +9,29 @@
#include "content/public/browser/notification_service.h" #include "content/public/browser/notification_service.h"
#include "content/public/test/test_utils.h" #include "content/public/test/test_utils.h"
#include "extensions/browser/api/dns/dns_api.h" #include "extensions/browser/api/dns/dns_api.h"
#include "extensions/browser/api/dns/host_resolver_wrapper.h"
#include "extensions/browser/api/dns/mock_host_resolver_creator.h"
#include "extensions/browser/api_test_utils.h" #include "extensions/browser/api_test_utils.h"
#include "extensions/browser/notification_types.h" #include "extensions/browser/notification_types.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h" #include "extensions/common/extension_builder.h"
#include "extensions/shell/test/shell_apitest.h" #include "extensions/shell/test/shell_apitest.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/dns/mock_host_resolver.h"
namespace extensions {
namespace {
using extensions::api_test_utils::RunFunctionAndReturnSingleResult; using extensions::api_test_utils::RunFunctionAndReturnSingleResult;
namespace extensions { constexpr char kHostname[] = "www.sowbug.com";
constexpr char kAddress[] = "9.8.7.6";
} // namespace
class DnsApiTest : public ShellApiTest { class DnsApiTest : public ShellApiTest {
public:
DnsApiTest() : resolver_creator_(new MockHostResolverCreator()) {}
private: private:
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
ShellApiTest::SetUpOnMainThread(); ShellApiTest::SetUpOnMainThread();
HostResolverWrapper::GetInstance()->SetHostResolverForTesting( host_resolver()->AddRule(kHostname, kAddress);
resolver_creator_->CreateMockHostResolver()); host_resolver()->AddSimulatedFailure("this.hostname.is.bogus");
} }
void TearDownOnMainThread() override {
HostResolverWrapper::GetInstance()->SetHostResolverForTesting(NULL);
resolver_creator_->DeleteMockHostResolver();
ShellApiTest::TearDownOnMainThread();
}
// The MockHostResolver asserts that it's used on the same thread on which
// it's created, which is actually a stronger rule than its real counterpart.
// But that's fine; it's good practice.
scoped_refptr<MockHostResolverCreator> resolver_creator_;
}; };
IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveIPLiteral) { IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveIPLiteral) {
...@@ -74,7 +63,7 @@ IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveHostname) { ...@@ -74,7 +63,7 @@ IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveHostname) {
resolve_function->set_has_callback(true); resolve_function->set_has_callback(true);
std::string function_arguments("[\""); std::string function_arguments("[\"");
function_arguments += MockHostResolverCreator::kHostname; function_arguments += kHostname;
function_arguments += "\"]"; function_arguments += "\"]";
std::unique_ptr<base::Value> result(RunFunctionAndReturnSingleResult( std::unique_ptr<base::Value> result(RunFunctionAndReturnSingleResult(
resolve_function.get(), function_arguments, browser_context())); resolve_function.get(), function_arguments, browser_context()));
...@@ -87,7 +76,7 @@ IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveHostname) { ...@@ -87,7 +76,7 @@ IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsResolveHostname) {
std::string address; std::string address;
EXPECT_TRUE(dict->GetString("address", &address)); EXPECT_TRUE(dict->GetString("address", &address));
EXPECT_EQ(MockHostResolverCreator::kAddress, address); EXPECT_EQ(kAddress, address);
} }
IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsExtension) { IN_PROC_BROWSER_TEST_F(DnsApiTest, DnsExtension) {
......
...@@ -8,7 +8,15 @@ import "services/network/public/mojom/network_change_manager.mojom"; ...@@ -8,7 +8,15 @@ import "services/network/public/mojom/network_change_manager.mojom";
import "services/network/public/mojom/network_param.mojom"; import "services/network/public/mojom/network_param.mojom";
import "services/network/public/mojom/network_types.mojom"; import "services/network/public/mojom/network_types.mojom";
// Maps to net::RuleBasedHostResolverProc::Rule::ResolverType.
enum ResolverType {
kResolverTypeFail,
kResolverTypeSystem,
kResolverTypeIPLiteral,
};
struct Rule { struct Rule {
ResolverType resolver_type;
string host_pattern; string host_pattern;
string replacement; string replacement;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment