Commit d8dfdb5a authored by Julie Jeongeun Kim's avatar Julie Jeongeun Kim Committed by Commit Bot

Convert HostResolverRequestClient to new Mojo types

This CL converts HostResolverRequestClientPtr and
HostResolverRequestClientRequest to new Mojo types.

It uses Remote or PendingRemote, PendingReceiver,
and Receiver instead of HostResolverRequestClientPtr,
HostResolverRequestClientRequest and Binding.

Bug: 955171
Change-Id: I11c270e26e77fee7391b64f898a0b10d8c66dc15
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1811406Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarMaks Orlovich <morlovich@chromium.org>
Commit-Queue: Julie Kim <jkim@igalia.com>
Cr-Commit-Position: refs/heads/master@{#698748}
parent 2bf1e06e
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/base/host_port_pair.h" #include "net/base/host_port_pair.h"
#include "net/base/ip_address.h" #include "net/base/ip_address.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
...@@ -27,7 +28,8 @@ class MojoHostResolverImpl::Job { ...@@ -27,7 +28,8 @@ class MojoHostResolverImpl::Job {
const std::string& hostname, const std::string& hostname,
bool is_ex, bool is_ex,
const net::NetLogWithSource& net_log, const net::NetLogWithSource& net_log,
proxy_resolver::mojom::HostResolverRequestClientPtr client); mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client);
~Job(); ~Job();
void set_iter(std::list<Job>::iterator iter) { iter_ = iter; } void set_iter(std::list<Job>::iterator iter) { iter_ = iter; }
...@@ -38,14 +40,14 @@ class MojoHostResolverImpl::Job { ...@@ -38,14 +40,14 @@ class MojoHostResolverImpl::Job {
// Completion callback for the HostResolver::Resolve request. // Completion callback for the HostResolver::Resolve request.
void OnResolveDone(int result); void OnResolveDone(int result);
// Mojo error handler. // Mojo disconnect handler.
void OnConnectionError(); void OnMojoDisconnect();
MojoHostResolverImpl* resolver_service_; MojoHostResolverImpl* resolver_service_;
// This Job's iterator in |resolver_service_|, so the Job may be removed on // This Job's iterator in |resolver_service_|, so the Job may be removed on
// completion. // completion.
std::list<Job>::iterator iter_; std::list<Job>::iterator iter_;
proxy_resolver::mojom::HostResolverRequestClientPtr client_; mojo::Remote<proxy_resolver::mojom::HostResolverRequestClient> client_;
const std::string hostname_; const std::string hostname_;
std::unique_ptr<net::HostResolver::ResolveHostRequest> request_; std::unique_ptr<net::HostResolver::ResolveHostRequest> request_;
base::ThreadChecker thread_checker_; base::ThreadChecker thread_checker_;
...@@ -62,7 +64,8 @@ MojoHostResolverImpl::~MojoHostResolverImpl() { ...@@ -62,7 +64,8 @@ MojoHostResolverImpl::~MojoHostResolverImpl() {
void MojoHostResolverImpl::Resolve( void MojoHostResolverImpl::Resolve(
const std::string& hostname, const std::string& hostname,
bool is_ex, bool is_ex,
proxy_resolver::mojom::HostResolverRequestClientPtr client) { mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
pending_jobs_.emplace_front(this, resolver_, hostname, is_ex, net_log_, pending_jobs_.emplace_front(this, resolver_, hostname, is_ex, net_log_,
...@@ -83,12 +86,13 @@ MojoHostResolverImpl::Job::Job( ...@@ -83,12 +86,13 @@ MojoHostResolverImpl::Job::Job(
const std::string& hostname, const std::string& hostname,
bool is_ex, bool is_ex,
const net::NetLogWithSource& net_log, const net::NetLogWithSource& net_log,
proxy_resolver::mojom::HostResolverRequestClientPtr client) mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client)
: resolver_service_(resolver_service), : resolver_service_(resolver_service),
client_(std::move(client)), client_(std::move(client)),
hostname_(hostname) { hostname_(hostname) {
client_.set_connection_error_handler(base::Bind( client_.set_disconnect_handler(base::Bind(
&MojoHostResolverImpl::Job::OnConnectionError, base::Unretained(this))); &MojoHostResolverImpl::Job::OnMojoDisconnect, base::Unretained(this)));
net::HostResolver::ResolveHostParameters parameters; net::HostResolver::ResolveHostParameters parameters;
if (!is_ex) if (!is_ex)
...@@ -133,11 +137,11 @@ void MojoHostResolverImpl::Job::OnResolveDone(int result) { ...@@ -133,11 +137,11 @@ void MojoHostResolverImpl::Job::OnResolveDone(int result) {
resolver_service_->DeleteJob(iter_); resolver_service_->DeleteJob(iter_);
} }
void MojoHostResolverImpl::Job::OnConnectionError() { void MojoHostResolverImpl::Job::OnMojoDisconnect() {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
// |resolver_service_| should always outlive us. // |resolver_service_| should always outlive us.
DCHECK(resolver_service_); DCHECK(resolver_service_);
DVLOG(1) << "Connection error on request for " << hostname_; DVLOG(1) << "Disconnection on request for " << hostname_;
resolver_service_->DeleteJob(iter_); resolver_service_->DeleteJob(iter_);
} }
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "net/log/net_log_with_source.h" #include "net/log/net_log_with_source.h"
#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h" #include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h"
...@@ -37,9 +38,11 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) MojoHostResolverImpl { ...@@ -37,9 +38,11 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) MojoHostResolverImpl {
const net::NetLogWithSource& net_log); const net::NetLogWithSource& net_log);
~MojoHostResolverImpl(); ~MojoHostResolverImpl();
void Resolve(const std::string& hostname, void Resolve(
const std::string& hostname,
bool is_ex, bool is_ex,
proxy_resolver::mojom::HostResolverRequestClientPtr client); mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client);
bool request_in_progress() { return !pending_jobs_.empty(); } bool request_in_progress() { return !pending_jobs_.empty(); }
......
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "net/base/address_family.h" #include "net/base/address_family.h"
#include "net/base/ip_address.h" #include "net/base/ip_address.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
...@@ -34,11 +33,11 @@ class TestRequestClient ...@@ -34,11 +33,11 @@ class TestRequestClient
: public proxy_resolver::mojom::HostResolverRequestClient { : public proxy_resolver::mojom::HostResolverRequestClient {
public: public:
explicit TestRequestClient( explicit TestRequestClient(
mojo::InterfaceRequest<proxy_resolver::mojom::HostResolverRequestClient> mojo::PendingReceiver<proxy_resolver::mojom::HostResolverRequestClient>
req) receiver)
: done_(false), binding_(this, std::move(req)) { : done_(false), receiver_(this, std::move(receiver)) {
binding_.set_connection_error_handler(base::Bind( receiver_.set_disconnect_handler(base::Bind(
&TestRequestClient::OnConnectionError, base::Unretained(this))); &TestRequestClient::OnMojoDisconnect, base::Unretained(this)));
} }
void WaitForResult(); void WaitForResult();
...@@ -52,14 +51,14 @@ class TestRequestClient ...@@ -52,14 +51,14 @@ class TestRequestClient
void ReportResult(int32_t error, void ReportResult(int32_t error,
const std::vector<net::IPAddress>& results) override; const std::vector<net::IPAddress>& results) override;
// Mojo error handler. // Mojo disconnect handler.
void OnConnectionError(); void OnMojoDisconnect();
bool done_; bool done_;
base::Closure run_loop_quit_closure_; base::Closure run_loop_quit_closure_;
base::Closure connection_error_quit_closure_; base::Closure connection_error_quit_closure_;
mojo::Binding<proxy_resolver::mojom::HostResolverRequestClient> binding_; mojo::Receiver<proxy_resolver::mojom::HostResolverRequestClient> receiver_;
}; };
void TestRequestClient::WaitForResult() { void TestRequestClient::WaitForResult() {
...@@ -90,7 +89,7 @@ void TestRequestClient::ReportResult( ...@@ -90,7 +89,7 @@ void TestRequestClient::ReportResult(
done_ = true; done_ = true;
} }
void TestRequestClient::OnConnectionError() { void TestRequestClient::OnMojoDisconnect() {
if (!connection_error_quit_closure_.is_null()) if (!connection_error_quit_closure_.is_null())
connection_error_quit_closure_.Run(); connection_error_quit_closure_.Run();
} }
...@@ -132,11 +131,12 @@ class MojoHostResolverImplTest : public testing::Test { ...@@ -132,11 +131,12 @@ class MojoHostResolverImplTest : public testing::Test {
}; };
TEST_F(MojoHostResolverImplTest, Resolve) { TEST_F(MojoHostResolverImplTest, Resolve) {
proxy_resolver::mojom::HostResolverRequestClientPtr client_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
TestRequestClient client(mojo::MakeRequest(&client_ptr)); client_remote;
TestRequestClient client(client_remote.InitWithNewPipeAndPassReceiver());
resolver_service_->Resolve("example.com", false /* is_ex */, resolver_service_->Resolve("example.com", false /* is_ex */,
std::move(client_ptr)); std::move(client_remote));
client.WaitForResult(); client.WaitForResult();
EXPECT_THAT(client.error_, IsOk()); EXPECT_THAT(client.error_, IsOk());
...@@ -144,13 +144,14 @@ TEST_F(MojoHostResolverImplTest, Resolve) { ...@@ -144,13 +144,14 @@ TEST_F(MojoHostResolverImplTest, Resolve) {
} }
TEST_F(MojoHostResolverImplTest, ResolveSynchronous) { TEST_F(MojoHostResolverImplTest, ResolveSynchronous) {
proxy_resolver::mojom::HostResolverRequestClientPtr client_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
TestRequestClient client(mojo::MakeRequest(&client_ptr)); client_remote;
TestRequestClient client(client_remote.InitWithNewPipeAndPassReceiver());
mock_host_resolver_.set_synchronous_mode(true); mock_host_resolver_.set_synchronous_mode(true);
resolver_service_->Resolve("example.com", false /* is_ex */, resolver_service_->Resolve("example.com", false /* is_ex */,
std::move(client_ptr)); std::move(client_remote));
client.WaitForResult(); client.WaitForResult();
EXPECT_THAT(client.error_, IsOk()); EXPECT_THAT(client.error_, IsOk());
...@@ -158,17 +159,19 @@ TEST_F(MojoHostResolverImplTest, ResolveSynchronous) { ...@@ -158,17 +159,19 @@ TEST_F(MojoHostResolverImplTest, ResolveSynchronous) {
} }
TEST_F(MojoHostResolverImplTest, ResolveMultiple) { TEST_F(MojoHostResolverImplTest, ResolveMultiple) {
proxy_resolver::mojom::HostResolverRequestClientPtr client1_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
TestRequestClient client1(mojo::MakeRequest(&client1_ptr)); client1_remote;
proxy_resolver::mojom::HostResolverRequestClientPtr client2_ptr; TestRequestClient client1(client1_remote.InitWithNewPipeAndPassReceiver());
TestRequestClient client2(mojo::MakeRequest(&client2_ptr)); mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client2_remote;
TestRequestClient client2(client2_remote.InitWithNewPipeAndPassReceiver());
mock_host_resolver_.set_ondemand_mode(true); mock_host_resolver_.set_ondemand_mode(true);
resolver_service_->Resolve("example.com", false /* is_ex */, resolver_service_->Resolve("example.com", false /* is_ex */,
std::move(client1_ptr)); std::move(client1_remote));
resolver_service_->Resolve("chromium.org", false /* is_ex */, resolver_service_->Resolve("chromium.org", false /* is_ex */,
std::move(client2_ptr)); std::move(client2_remote));
WaitForRequests(2); WaitForRequests(2);
mock_host_resolver_.ResolveAllPending(); mock_host_resolver_.ResolveAllPending();
...@@ -182,17 +185,19 @@ TEST_F(MojoHostResolverImplTest, ResolveMultiple) { ...@@ -182,17 +185,19 @@ TEST_F(MojoHostResolverImplTest, ResolveMultiple) {
} }
TEST_F(MojoHostResolverImplTest, ResolveDuplicate) { TEST_F(MojoHostResolverImplTest, ResolveDuplicate) {
proxy_resolver::mojom::HostResolverRequestClientPtr client1_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
TestRequestClient client1(mojo::MakeRequest(&client1_ptr)); client1_remote;
proxy_resolver::mojom::HostResolverRequestClientPtr client2_ptr; TestRequestClient client1(client1_remote.InitWithNewPipeAndPassReceiver());
TestRequestClient client2(mojo::MakeRequest(&client2_ptr)); mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client2_remote;
TestRequestClient client2(client2_remote.InitWithNewPipeAndPassReceiver());
mock_host_resolver_.set_ondemand_mode(true); mock_host_resolver_.set_ondemand_mode(true);
resolver_service_->Resolve("example.com", false /* is_ex */, resolver_service_->Resolve("example.com", false /* is_ex */,
std::move(client1_ptr)); std::move(client1_remote));
resolver_service_->Resolve("example.com", false /* is_ex */, resolver_service_->Resolve("example.com", false /* is_ex */,
std::move(client2_ptr)); std::move(client2_remote));
WaitForRequests(2); WaitForRequests(2);
mock_host_resolver_.ResolveAllPending(); mock_host_resolver_.ResolveAllPending();
...@@ -206,11 +211,12 @@ TEST_F(MojoHostResolverImplTest, ResolveDuplicate) { ...@@ -206,11 +211,12 @@ TEST_F(MojoHostResolverImplTest, ResolveDuplicate) {
} }
TEST_F(MojoHostResolverImplTest, ResolveFailure) { TEST_F(MojoHostResolverImplTest, ResolveFailure) {
proxy_resolver::mojom::HostResolverRequestClientPtr client_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
TestRequestClient client(mojo::MakeRequest(&client_ptr)); client_remote;
TestRequestClient client(client_remote.InitWithNewPipeAndPassReceiver());
resolver_service_->Resolve("failure.fail", false /* is_ex */, resolver_service_->Resolve("failure.fail", false /* is_ex */,
std::move(client_ptr)); std::move(client_remote));
client.WaitForResult(); client.WaitForResult();
EXPECT_THAT(client.error_, IsError(net::ERR_NAME_NOT_RESOLVED)); EXPECT_THAT(client.error_, IsError(net::ERR_NAME_NOT_RESOLVED));
...@@ -218,11 +224,12 @@ TEST_F(MojoHostResolverImplTest, ResolveFailure) { ...@@ -218,11 +224,12 @@ TEST_F(MojoHostResolverImplTest, ResolveFailure) {
} }
TEST_F(MojoHostResolverImplTest, ResolveEx) { TEST_F(MojoHostResolverImplTest, ResolveEx) {
proxy_resolver::mojom::HostResolverRequestClientPtr client_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
TestRequestClient client(mojo::MakeRequest(&client_ptr)); client_remote;
TestRequestClient client(client_remote.InitWithNewPipeAndPassReceiver());
resolver_service_->Resolve("example.com", true /* is_ex */, resolver_service_->Resolve("example.com", true /* is_ex */,
std::move(client_ptr)); std::move(client_remote));
client.WaitForResult(); client.WaitForResult();
EXPECT_THAT(client.error_, IsOk()); EXPECT_THAT(client.error_, IsOk());
...@@ -230,14 +237,15 @@ TEST_F(MojoHostResolverImplTest, ResolveEx) { ...@@ -230,14 +237,15 @@ TEST_F(MojoHostResolverImplTest, ResolveEx) {
} }
TEST_F(MojoHostResolverImplTest, DestroyClient) { TEST_F(MojoHostResolverImplTest, DestroyClient) {
proxy_resolver::mojom::HostResolverRequestClientPtr client_ptr; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client_remote;
std::unique_ptr<TestRequestClient> client( std::unique_ptr<TestRequestClient> client(
new TestRequestClient(mojo::MakeRequest(&client_ptr))); new TestRequestClient(client_remote.InitWithNewPipeAndPassReceiver()));
mock_host_resolver_.set_ondemand_mode(true); mock_host_resolver_.set_ondemand_mode(true);
resolver_service_->Resolve("example.com", false /* is_ex */, resolver_service_->Resolve("example.com", false /* is_ex */,
std::move(client_ptr)); std::move(client_remote));
WaitForRequests(1); WaitForRequests(1);
client.reset(); client.reset();
......
...@@ -53,13 +53,14 @@ base::Value NetLogErrorParams(int line_number, const std::string& message) { ...@@ -53,13 +53,14 @@ base::Value NetLogErrorParams(int line_number, const std::string& message) {
// on a worker thread. Will notify |client| on completion. // on a worker thread. Will notify |client| on completion.
void DoMyIpAddressOnWorker( void DoMyIpAddressOnWorker(
bool is_ex, bool is_ex,
proxy_resolver::mojom::HostResolverRequestClientPtrInfo client_info) { mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
client_remote) {
// Resolve the list of IP addresses. // Resolve the list of IP addresses.
std::vector<net::IPAddress> my_ip_addresses = std::vector<net::IPAddress> my_ip_addresses =
is_ex ? net::PacMyIpAddressEx() : net::PacMyIpAddress(); is_ex ? net::PacMyIpAddressEx() : net::PacMyIpAddress();
proxy_resolver::mojom::HostResolverRequestClientPtr client; mojo::Remote<proxy_resolver::mojom::HostResolverRequestClient> client(
client.Bind(std::move(client_info)); std::move(client_remote));
// TODO(eroman): Note that this code always returns a success response (with // TODO(eroman): Note that this code always returns a success response (with
// loopback) rather than passing forward the error. This is to ensure that the // loopback) rather than passing forward the error. This is to ensure that the
...@@ -129,10 +130,7 @@ class ClientMixin : public ClientInterface { ...@@ -129,10 +130,7 @@ class ClientMixin : public ClientInterface {
base::BindOnce(&DoMyIpAddressOnWorker, is_ex, std::move(client))); base::BindOnce(&DoMyIpAddressOnWorker, is_ex, std::move(client)));
} else { } else {
// Request was for dnsResolve() or dnsResolveEx(). // Request was for dnsResolve() or dnsResolveEx().
host_resolver_.Resolve( host_resolver_.Resolve(hostname, is_ex, std::move(client));
hostname, is_ex,
proxy_resolver::mojom::HostResolverRequestClientPtr(
std::move(client)));
} }
} }
......
...@@ -282,11 +282,12 @@ void MockMojoProxyResolver::GetProxyForUrl( ...@@ -282,11 +282,12 @@ void MockMojoProxyResolver::GetProxyForUrl(
break; break;
} }
case GetProxyForUrlAction::MAKE_DNS_REQUEST: { case GetProxyForUrlAction::MAKE_DNS_REQUEST: {
proxy_resolver::mojom::HostResolverRequestClientPtr dns_client; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
mojo::MakeRequest(&dns_client); dns_client;
ignore_result(dns_client.InitWithNewPipeAndPassReceiver());
client->ResolveDns(url.host(), client->ResolveDns(url.host(),
net::ProxyResolveDnsOperation::DNS_RESOLVE_EX, net::ProxyResolveDnsOperation::DNS_RESOLVE_EX,
dns_client.PassInterface()); std::move(dns_client));
blocked_clients_.push_back( blocked_clients_.push_back(
std::make_unique< std::make_unique<
proxy_resolver::mojom::ProxyResolverRequestClientPtr>( proxy_resolver::mojom::ProxyResolverRequestClientPtr>(
...@@ -467,11 +468,12 @@ void MockMojoProxyResolverFactory::CreateResolver( ...@@ -467,11 +468,12 @@ void MockMojoProxyResolverFactory::CreateResolver(
break; break;
} }
case CreateProxyResolverAction::MAKE_DNS_REQUEST: { case CreateProxyResolverAction::MAKE_DNS_REQUEST: {
proxy_resolver::mojom::HostResolverRequestClientPtr dns_client; mojo::PendingRemote<proxy_resolver::mojom::HostResolverRequestClient>
mojo::MakeRequest(&dns_client); dns_client;
ignore_result(dns_client.InitWithNewPipeAndPassReceiver());
client->ResolveDns(pac_script, client->ResolveDns(pac_script,
net::ProxyResolveDnsOperation::DNS_RESOLVE_EX, net::ProxyResolveDnsOperation::DNS_RESOLVE_EX,
dns_client.PassInterface()); std::move(dns_client));
blocked_clients_.push_back( blocked_clients_.push_back(
std::make_unique< std::make_unique<
proxy_resolver::mojom::ProxyResolverFactoryRequestClientPtr>( proxy_resolver::mojom::ProxyResolverFactoryRequestClientPtr>(
......
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