Commit 478a0e78 authored by Eric Orth's avatar Eric Orth Committed by Commit Bot

Modernize resolve calls in QuicStreamFactory

Some reworking how the "DNS race" works now that the initial resolve
can handle both stale and fresh and we only need to spawn a separate
call if it actually does return a stale result.

Also fix some tests that were relying on a custom HostResolver mock
that gave unintended behavior when CreateRequest() was used instead of
Resolve().

Bug: 922699
Change-Id: I349b5995f2fc5c9042f1a0387bac4018461717d4
Reviewed-on: https://chromium-review.googlesource.com/c/1435710Reviewed-by: default avatarAsanka Herath <asanka@chromium.org>
Commit-Queue: Eric Orth <ericorth@chromium.org>
Cr-Commit-Position: refs/heads/master@{#630120}
parent 0d92c744
......@@ -110,23 +110,6 @@ class FailingHostResolver : public MockHostResolverBase {
}
};
// TODO(xunjieli): This should just use HangingHostResolver from
// mock_host_resolver.h
class HangingResolver : public MockHostResolverBase {
public:
HangingResolver() : MockHostResolverBase(false /*use_caching*/) {}
~HangingResolver() override = default;
int Resolve(const RequestInfo& info,
RequestPriority priority,
AddressList* addresses,
CompletionOnceCallback callback,
std::unique_ptr<Request>* out_req,
const NetLogWithSource& net_log) override {
return ERR_IO_PENDING;
}
};
// A mock HttpServerProperties that always returns false for IsInitialized().
class MockHttpServerProperties : public HttpServerPropertiesImpl {
public:
......@@ -1832,7 +1815,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, ResumeMainJobLaterCanceled) {
session_deps_.proxy_resolution_service = std::move(proxy_resolution_service);
// Using hanging resolver will cause the alternative job to hang indefinitely.
session_deps_.host_resolver = std::make_unique<HangingResolver>();
session_deps_.alternate_host_resolver =
std::make_unique<HangingHostResolver>();
HttpRequestInfo request_info;
request_info.method = "GET";
......@@ -2032,7 +2016,8 @@ TEST_F(HttpStreamFactoryJobControllerTest,
// scheme is HTTPS.
TEST_F(HttpStreamFactoryJobControllerTest, HttpsURL) {
// Using hanging resolver will cause the alternative job to hang indefinitely.
session_deps_.host_resolver = std::make_unique<HangingResolver>();
session_deps_.alternate_host_resolver =
std::make_unique<HangingHostResolver>();
HttpRequestInfo request_info;
request_info.method = "GET";
......@@ -2055,7 +2040,8 @@ TEST_F(HttpStreamFactoryJobControllerTest, HttpsURL) {
// does not fetch the resource through a proxy.
TEST_F(HttpStreamFactoryJobControllerTest, HttpURLWithNoProxy) {
// Using hanging resolver will cause the alternative job to hang indefinitely.
session_deps_.host_resolver = std::make_unique<HangingResolver>();
session_deps_.alternate_host_resolver =
std::make_unique<HangingHostResolver>();
HttpRequestInfo request_info;
request_info.method = "GET";
......
This diff is collapsed.
......@@ -19,6 +19,7 @@
#include "net/cert/do_nothing_ct_verifier.h"
#include "net/cert/mock_cert_verifier.h"
#include "net/cert/signed_certificate_timestamp_and_status.h"
#include "net/dns/host_resolver.h"
#include "net/http/http_cache.h"
#include "net/http/http_network_transaction.h"
#include "net/log/net_log_with_source.h"
......@@ -401,7 +402,7 @@ HttpNetworkSession::Context SpdySessionDependencies::CreateSessionContext(
SpdySessionDependencies* session_deps) {
HttpNetworkSession::Context context;
context.client_socket_factory = session_deps->socket_factory.get();
context.host_resolver = session_deps->host_resolver.get();
context.host_resolver = session_deps->GetHostResolver();
context.cert_verifier = session_deps->cert_verifier.get();
context.channel_id_service = session_deps->channel_id_service.get();
context.transport_security_state =
......
......@@ -52,6 +52,7 @@ class CTVerifier;
class CTPolicyEnforcer;
class HashValue;
class HostPortPair;
class HostResolver;
class NetLogWithSource;
class SpdySessionKey;
class SpdyStream;
......@@ -183,6 +184,11 @@ struct SpdySessionDependencies {
~SpdySessionDependencies();
HostResolver* GetHostResolver() {
return alternate_host_resolver ? alternate_host_resolver.get()
: host_resolver.get();
}
static std::unique_ptr<HttpNetworkSession> SpdyCreateSession(
SpdySessionDependencies* session_deps);
......@@ -198,6 +204,8 @@ struct SpdySessionDependencies {
// NOTE: host_resolver must be ordered before http_auth_handler_factory.
std::unique_ptr<MockHostResolverBase> host_resolver;
// For using a HostResolver not derived from MockHostResolverBase.
std::unique_ptr<HostResolver> alternate_host_resolver;
std::unique_ptr<CertVerifier> cert_verifier;
std::unique_ptr<ChannelIDService> channel_id_service;
std::unique_ptr<TransportSecurityState> transport_security_state;
......
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