Commit ebe90663 authored by dalyk's avatar dalyk Committed by Commit Bot

Bind new mojom HostResolvers asynchronously.

Binding new HostResolvers asynchronously gives them slightly longer to
set up before they might be used by a consumer. Some host resolvers may
need to obtain the system config asynchronously during setup.

Bug: 1041045
Change-Id: Ia238e7eb77ac0551d4bfa282c2dcde14cc279fec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1995369
Commit-Queue: Katharine Daly <dalyk@google.com>
Reviewed-by: default avatarEric Orth <ericorth@chromium.org>
Cr-Commit-Position: refs/heads/master@{#733061}
parent 2aa8d3b9
...@@ -54,12 +54,16 @@ HostResolver::HostResolver( ...@@ -54,12 +54,16 @@ HostResolver::HostResolver(
ConnectionShutdownCallback connection_shutdown_callback, ConnectionShutdownCallback connection_shutdown_callback,
net::HostResolver* internal_resolver, net::HostResolver* internal_resolver,
net::NetLog* net_log) net::NetLog* net_log)
: receiver_(this, std::move(resolver_receiver)), : receiver_(this),
pending_receiver_(std::move(resolver_receiver)),
connection_shutdown_callback_(std::move(connection_shutdown_callback)), connection_shutdown_callback_(std::move(connection_shutdown_callback)),
internal_resolver_(internal_resolver), internal_resolver_(internal_resolver),
net_log_(net_log) { net_log_(net_log) {
receiver_.set_disconnect_handler( // Bind the pending receiver asynchronously to give the resolver a chance
base::BindOnce(&HostResolver::OnConnectionError, base::Unretained(this))); // to set up (some resolvers need to obtain the system config asynchronously).
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&HostResolver::AsyncSetUp, weak_factory_.GetWeakPtr()));
} }
HostResolver::HostResolver(net::HostResolver* internal_resolver, HostResolver::HostResolver(net::HostResolver* internal_resolver,
...@@ -140,6 +144,12 @@ void HostResolver::SetResolveHostCallbackForTesting( ...@@ -140,6 +144,12 @@ void HostResolver::SetResolveHostCallbackForTesting(
resolve_host_callback.Get() = std::move(callback); resolve_host_callback.Get() = std::move(callback);
} }
void HostResolver::AsyncSetUp() {
receiver_.Bind(std::move(pending_receiver_));
receiver_.set_disconnect_handler(
base::BindOnce(&HostResolver::OnConnectionError, base::Unretained(this)));
}
void HostResolver::OnResolveHostComplete(ResolveHostRequest* request, void HostResolver::OnResolveHostComplete(ResolveHostRequest* request,
int error) { int error) {
DCHECK_NE(net::ERR_IO_PENDING, error); DCHECK_NE(net::ERR_IO_PENDING, error);
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/containers/unique_ptr_adapters.h" #include "base/containers/unique_ptr_adapters.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
...@@ -68,11 +69,13 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HostResolver ...@@ -68,11 +69,13 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HostResolver
static void SetResolveHostCallbackForTesting(ResolveHostCallback callback); static void SetResolveHostCallbackForTesting(ResolveHostCallback callback);
private: private:
void AsyncSetUp();
void OnResolveHostComplete(ResolveHostRequest* request, int error); void OnResolveHostComplete(ResolveHostRequest* request, int error);
void OnMdnsListenerCancelled(HostResolverMdnsListener* listener); void OnMdnsListenerCancelled(HostResolverMdnsListener* listener);
void OnConnectionError(); void OnConnectionError();
mojo::Receiver<mojom::HostResolver> receiver_; mojo::Receiver<mojom::HostResolver> receiver_;
mojo::PendingReceiver<mojom::HostResolver> pending_receiver_;
ConnectionShutdownCallback connection_shutdown_callback_; ConnectionShutdownCallback connection_shutdown_callback_;
std::set<std::unique_ptr<ResolveHostRequest>, base::UniquePtrComparator> std::set<std::unique_ptr<ResolveHostRequest>, base::UniquePtrComparator>
requests_; requests_;
...@@ -82,6 +85,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HostResolver ...@@ -82,6 +85,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) HostResolver
net::HostResolver* const internal_resolver_; net::HostResolver* const internal_resolver_;
net::NetLog* const net_log_; net::NetLog* const net_log_;
base::WeakPtrFactory<HostResolver> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(HostResolver); DISALLOW_COPY_AND_ASSIGN(HostResolver);
}; };
......
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