Update from chromium https://crrev.com/301725/
This updates DEPS to reflect changes in 301725 /
90a7c4e3fdeb82a18e17f24e56345b9086a8308b, imports changes, and adds
a patch file for our ui/gl/gl_surface modifications.
Review URL: https://codereview.chromium.org/669813003
diff --git a/net/quic/congestion_control/hybrid_slow_start_test.cc b/net/quic/congestion_control/hybrid_slow_start_test.cc
index bea5840..dd74933 100644
--- a/net/quic/congestion_control/hybrid_slow_start_test.cc
+++ b/net/quic/congestion_control/hybrid_slow_start_test.cc
@@ -17,9 +17,7 @@
: one_ms_(QuicTime::Delta::FromMilliseconds(1)),
rtt_(QuicTime::Delta::FromMilliseconds(60)) {
}
- virtual void SetUp() {
- slow_start_.reset(new HybridSlowStart(&clock_));
- }
+ void SetUp() override { slow_start_.reset(new HybridSlowStart(&clock_)); }
const QuicTime::Delta one_ms_;
const QuicTime::Delta rtt_;
MockClock clock_;
diff --git a/net/quic/congestion_control/leaky_bucket_test.cc b/net/quic/congestion_control/leaky_bucket_test.cc
index 977ef94..8387ada 100644
--- a/net/quic/congestion_control/leaky_bucket_test.cc
+++ b/net/quic/congestion_control/leaky_bucket_test.cc
@@ -13,7 +13,7 @@
class LeakyBucketTest : public ::testing::Test {
protected:
- virtual void SetUp() {
+ void SetUp() override {
leaky_bucket_.reset(new LeakyBucket(QuicBandwidth::Zero()));
}
MockClock clock_;
diff --git a/net/quic/congestion_control/pacing_sender_test.cc b/net/quic/congestion_control/pacing_sender_test.cc
index 0be0b0a..a7838b9 100644
--- a/net/quic/congestion_control/pacing_sender_test.cc
+++ b/net/quic/congestion_control/pacing_sender_test.cc
@@ -35,7 +35,7 @@
clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(9));
}
- virtual ~PacingSenderTest() {}
+ ~PacingSenderTest() override {}
void CheckPacketIsSentImmediately() {
// In order for the packet to be sendable, the underlying sender must
diff --git a/net/quic/congestion_control/tcp_receiver_test.cc b/net/quic/congestion_control/tcp_receiver_test.cc
index e074fdf..833631e 100644
--- a/net/quic/congestion_control/tcp_receiver_test.cc
+++ b/net/quic/congestion_control/tcp_receiver_test.cc
@@ -13,9 +13,7 @@
class QuicTcpReceiverTest : public ::testing::Test {
protected:
- virtual void SetUp() {
- receiver_.reset(new TcpReceiver());
- }
+ void SetUp() override { receiver_.reset(new TcpReceiver()); }
scoped_ptr<TcpReceiver> receiver_;
};
diff --git a/net/quic/crypto/aes_128_gcm_12_decrypter.h b/net/quic/crypto/aes_128_gcm_12_decrypter.h
index 3de537e..0f7f1d1 100644
--- a/net/quic/crypto/aes_128_gcm_12_decrypter.h
+++ b/net/quic/crypto/aes_128_gcm_12_decrypter.h
@@ -28,10 +28,10 @@
#if !defined(USE_OPENSSL)
protected:
// AeadBaseDecrypter methods:
- virtual void FillAeadParams(base::StringPiece nonce,
- base::StringPiece associated_data,
- size_t auth_tag_size,
- AeadParams* aead_params) const override;
+ void FillAeadParams(base::StringPiece nonce,
+ base::StringPiece associated_data,
+ size_t auth_tag_size,
+ AeadParams* aead_params) const override;
#endif
private:
diff --git a/net/quic/crypto/aes_128_gcm_12_encrypter.h b/net/quic/crypto/aes_128_gcm_12_encrypter.h
index bff3ec5..2b432fb 100644
--- a/net/quic/crypto/aes_128_gcm_12_encrypter.h
+++ b/net/quic/crypto/aes_128_gcm_12_encrypter.h
@@ -28,10 +28,10 @@
#if !defined(USE_OPENSSL)
protected:
// AeadBaseEncrypter methods:
- virtual void FillAeadParams(base::StringPiece nonce,
- base::StringPiece associated_data,
- size_t auth_tag_size,
- AeadParams* aead_params) const override;
+ void FillAeadParams(base::StringPiece nonce,
+ base::StringPiece associated_data,
+ size_t auth_tag_size,
+ AeadParams* aead_params) const override;
#endif
private:
diff --git a/net/quic/crypto/chacha20_poly1305_decrypter.h b/net/quic/crypto/chacha20_poly1305_decrypter.h
index 04f5341..7d81d70 100644
--- a/net/quic/crypto/chacha20_poly1305_decrypter.h
+++ b/net/quic/crypto/chacha20_poly1305_decrypter.h
@@ -32,10 +32,10 @@
#if !defined(USE_OPENSSL)
protected:
// AeadBaseDecrypter methods:
- virtual void FillAeadParams(base::StringPiece nonce,
- base::StringPiece associated_data,
- size_t auth_tag_size,
- AeadParams* aead_params) const override;
+ void FillAeadParams(base::StringPiece nonce,
+ base::StringPiece associated_data,
+ size_t auth_tag_size,
+ AeadParams* aead_params) const override;
#endif
private:
diff --git a/net/quic/crypto/chacha20_poly1305_encrypter.h b/net/quic/crypto/chacha20_poly1305_encrypter.h
index 1dcfd7c..6504970 100644
--- a/net/quic/crypto/chacha20_poly1305_encrypter.h
+++ b/net/quic/crypto/chacha20_poly1305_encrypter.h
@@ -32,10 +32,10 @@
#if !defined(USE_OPENSSL)
protected:
// AeadBaseEncrypter methods:
- virtual void FillAeadParams(base::StringPiece nonce,
- base::StringPiece associated_data,
- size_t auth_tag_size,
- AeadParams* aead_params) const override;
+ void FillAeadParams(base::StringPiece nonce,
+ base::StringPiece associated_data,
+ size_t auth_tag_size,
+ AeadParams* aead_params) const override;
#endif
private:
diff --git a/net/quic/crypto/crypto_server_test.cc b/net/quic/crypto/crypto_server_test.cc
index 1905109..74a3666 100644
--- a/net/quic/crypto/crypto_server_test.cc
+++ b/net/quic/crypto/crypto_server_test.cc
@@ -92,7 +92,7 @@
GetParam().send_quic_crypto_reject_reason;
}
- virtual void SetUp() {
+ void SetUp() override {
scoped_ptr<CryptoHandshakeMessage> msg(
config_.AddDefaultConfig(rand_, &clock_,
config_options_));
@@ -640,7 +640,7 @@
class CryptoServerTestNoConfig : public CryptoServerTest {
public:
- virtual void SetUp() {
+ void SetUp() override {
// Deliberately don't add a config so that we can test this situation.
}
};
@@ -662,7 +662,7 @@
AsyncStrikeServerVerificationTest() {
}
- virtual void SetUp() {
+ void SetUp() override {
const string kOrbit = "12345678";
config_options_.orbit = kOrbit;
strike_register_client_ = new DelayedVerifyStrikeRegisterClient(
diff --git a/net/quic/crypto/local_strike_register_client_test.cc b/net/quic/crypto/local_strike_register_client_test.cc
index a2c3ce2..b713c10 100644
--- a/net/quic/crypto/local_strike_register_client_test.cc
+++ b/net/quic/crypto/local_strike_register_client_test.cc
@@ -60,7 +60,7 @@
LocalStrikeRegisterClientTest() {
}
- virtual void SetUp() {
+ void SetUp() override {
strike_register_.reset(new LocalStrikeRegisterClient(
kMaxEntries, kCurrentTimeExternalSecs, kWindowSecs, kOrbit,
net::StrikeRegister::NO_STARTUP_PERIOD_NEEDED));
diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_verifier_chromium.cc
index 775e374..f9568c2 100644
--- a/net/quic/crypto/proof_verifier_chromium.cc
+++ b/net/quic/crypto/proof_verifier_chromium.cc
@@ -250,6 +250,19 @@
result = ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN;
}
+ scoped_refptr<ct::EVCertsWhitelist> ev_whitelist =
+ SSLConfigService::GetEVCertsWhitelist();
+ if ((cert_status & CERT_STATUS_IS_EV) && ev_whitelist.get() &&
+ ev_whitelist->IsValid()) {
+ const SHA256HashValue fingerprint(
+ X509Certificate::CalculateFingerprint256(cert_->os_cert_handle()));
+
+ UMA_HISTOGRAM_BOOLEAN(
+ "Net.SSL_EVCertificateInWhitelist",
+ ev_whitelist->ContainsCertificateHash(
+ std::string(reinterpret_cast<const char*>(fingerprint.data), 8)));
+ }
+
if (result != OK) {
std::string error_string = ErrorToString(result);
error_details_ = StringPrintf("Failed to verify certificate chain: %s",
diff --git a/net/quic/crypto/quic_crypto_server_config_test.cc b/net/quic/crypto/quic_crypto_server_config_test.cc
index 0743a18..1e91dfc 100644
--- a/net/quic/crypto/quic_crypto_server_config_test.cc
+++ b/net/quic/crypto/quic_crypto_server_config_test.cc
@@ -402,7 +402,7 @@
config_(QuicCryptoServerConfig::TESTING, rand_),
test_peer_(&config_) {}
- virtual void SetUp() {
+ void SetUp() override {
clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1000));
}
diff --git a/net/quic/crypto/quic_server_info.h b/net/quic/crypto/quic_server_info.h
index fd54b94..2a5c6fc 100644
--- a/net/quic/crypto/quic_server_info.h
+++ b/net/quic/crypto/quic_server_info.h
@@ -45,6 +45,10 @@
// but, obviously, a callback will never be made.
virtual int WaitForDataReady(const CompletionCallback& callback) = 0;
+ // Cancel's WaitForDataReady callback. |callback| passed in WaitForDataReady
+ // will not be called.
+ virtual void CancelWaitForDataReadyCallback() = 0;
+
// Returns true if data is loaded from disk cache and ready (WaitForDataReady
// doesn't have a pending callback).
virtual bool IsDataReady() = 0;
@@ -104,13 +108,16 @@
DISALLOW_COPY_AND_ASSIGN(QuicServerInfo);
};
-class QuicServerInfoFactory {
+class NET_EXPORT_PRIVATE QuicServerInfoFactory {
public:
+ QuicServerInfoFactory() {}
virtual ~QuicServerInfoFactory();
// GetForServer returns a fresh, allocated QuicServerInfo for the given
// |server_id| or NULL on failure.
virtual QuicServerInfo* GetForServer(const QuicServerId& server_id) = 0;
+
+ DISALLOW_COPY_AND_ASSIGN(QuicServerInfoFactory);
};
} // namespace net
diff --git a/net/quic/quic_ack_notifier_test.cc b/net/quic/quic_ack_notifier_test.cc
index 63bc254..fbc7e37 100644
--- a/net/quic/quic_ack_notifier_test.cc
+++ b/net/quic/quic_ack_notifier_test.cc
@@ -18,7 +18,7 @@
protected:
QuicAckNotifierTest() : zero_(QuicTime::Delta::Zero()) {}
- virtual void SetUp() {
+ void SetUp() override {
delegate_ = new MockAckNotifierDelegate;
notifier_.reset(new QuicAckNotifier(delegate_));
diff --git a/net/quic/quic_client_session_test.cc b/net/quic/quic_client_session_test.cc
index b1cfe3d..cae2220 100644
--- a/net/quic/quic_client_session_test.cc
+++ b/net/quic/quic_client_session_test.cc
@@ -53,9 +53,7 @@
&crypto_config_, nullptr);
}
- virtual void TearDown() override {
- session_.CloseSessionOnError(ERR_ABORTED);
- }
+ void TearDown() override { session_.CloseSessionOnError(ERR_ABORTED); }
scoped_ptr<DatagramClientSocket> GetSocket() {
socket_factory_.AddSocketDataProvider(&socket_data_);
diff --git a/net/quic/quic_end_to_end_unittest.cc b/net/quic/quic_end_to_end_unittest.cc
index 96833af..a3fa12b 100644
--- a/net/quic/quic_end_to_end_unittest.cc
+++ b/net/quic/quic_end_to_end_unittest.cc
@@ -49,21 +49,18 @@
TestTransactionFactory(const HttpNetworkSession::Params& params)
: session_(new HttpNetworkSession(params)) {}
- virtual ~TestTransactionFactory() {
- }
+ ~TestTransactionFactory() override {}
// HttpTransactionFactory methods
- virtual int CreateTransaction(RequestPriority priority,
- scoped_ptr<HttpTransaction>* trans) override {
+ int CreateTransaction(RequestPriority priority,
+ scoped_ptr<HttpTransaction>* trans) override {
trans->reset(new HttpNetworkTransaction(priority, session_.get()));
return OK;
}
- virtual HttpCache* GetCache() override {
- return nullptr;
- }
+ HttpCache* GetCache() override { return nullptr; }
- virtual HttpNetworkSession* GetSession() override { return session_.get(); };
+ HttpNetworkSession* GetSession() override { return session_.get(); };
private:
scoped_refptr<HttpNetworkSession> session_;
@@ -105,7 +102,7 @@
return resolver;
}
- virtual void SetUp() {
+ void SetUp() override {
QuicInMemoryCachePeer::ResetForTests();
StartServer();
@@ -123,7 +120,7 @@
transaction_factory_.reset(new TestTransactionFactory(params_));
}
- virtual void TearDown() {
+ void TearDown() override {
StopServer();
QuicInMemoryCachePeer::ResetForTests();
}
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 9d12a01..ab698f3 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -121,12 +121,12 @@
clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
}
- virtual void SetUp() {
+ void SetUp() override {
NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
base::MessageLoop::current()->RunUntilIdle();
}
- virtual void TearDown() {
+ void TearDown() override {
NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
// Empty the current queue.
base::MessageLoop::current()->RunUntilIdle();
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 046c0a1..678463e 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -180,6 +180,8 @@
void OnIOComplete(int rv);
+ void CancelWaitForDataReadyCallback();
+
CompletionCallback callback() {
return callback_;
}
@@ -309,6 +311,14 @@
}
}
+void QuicStreamFactory::Job::CancelWaitForDataReadyCallback() {
+ // If we are waiting for WaitForDataReadyCallback, then cancel the callback.
+ if (io_state_ != STATE_LOAD_SERVER_INFO_COMPLETE)
+ return;
+ server_info_->CancelWaitForDataReadyCallback();
+ OnIOComplete(OK);
+}
+
int QuicStreamFactory::Job::DoResolveHost() {
// Start loading the data now, and wait for it after we resolve the host.
if (server_info_) {
@@ -350,6 +360,17 @@
if (!server_info_)
return OK;
+ // To mitigate the effects of disk cache taking too long to load QUIC server
+ // information, set up a timer to cancel WaitForDataReady's callback.
+ if (factory_->load_server_info_timeout_ms_ > 0) {
+ factory_->task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&QuicStreamFactory::Job::CancelWaitForDataReadyCallback,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(
+ factory_->load_server_info_timeout_ms_));
+ }
+
disk_cache_load_start_time_ = base::TimeTicks::Now();
return server_info_->WaitForDataReady(
base::Bind(&QuicStreamFactory::Job::OnIOComplete,
@@ -491,6 +512,7 @@
bool enable_port_selection,
bool always_require_handshake_confirmation,
bool disable_connection_pooling,
+ int load_server_info_timeout,
const QuicTagVector& connection_options)
: require_confirmation_(true),
host_resolver_(host_resolver),
@@ -508,8 +530,10 @@
always_require_handshake_confirmation_(
always_require_handshake_confirmation),
disable_connection_pooling_(disable_connection_pooling),
+ load_server_info_timeout_ms_(load_server_info_timeout),
port_seed_(random_generator_->RandUint64()),
check_persisted_supports_quic_(true),
+ task_runner_(nullptr),
weak_factory_(this) {
DCHECK(transport_security_state_);
crypto_config_.set_user_agent_id(user_agent_id);
@@ -574,6 +598,11 @@
quic_server_info = quic_server_info_factory_->GetForServer(server_id);
}
}
+ // TODO(rtenneti): Initialize task_runner_ in the constructor after
+ // WebRequestActionWithThreadsTest.* tests are fixed.
+ if (!task_runner_)
+ task_runner_ = base::MessageLoop::current()->message_loop_proxy().get();
+
bool was_alternate_protocol_recently_broken =
http_server_properties_ &&
http_server_properties_->WasAlternateProtocolRecentlyBroken(
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index 7ee3681..c892cb2 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -104,6 +104,7 @@
bool enable_port_selection,
bool always_require_handshake_confirmation,
bool disable_connection_pooling,
+ int load_server_info_timeout,
const QuicTagVector& connection_options);
~QuicStreamFactory() override;
@@ -282,6 +283,11 @@
// Set if we do not want connection pooling.
bool disable_connection_pooling_;
+ // Specifies the timeout in milliseconds to wait for loading of QUIC server
+ // information. If we don't want to timeout, set
+ // |load_server_info_timeout_ms_| to 0.
+ int load_server_info_timeout_ms_;
+
// Each profile will (probably) have a unique port_seed_ value. This value is
// used to help seed a pseudo-random number generator (PortSuggester) so that
// we consistently (within this profile) suggest the same ephemeral port when
@@ -294,6 +300,8 @@
IPEndPoint local_address_;
bool check_persisted_supports_quic_;
+ base::TaskRunner* task_runner_;
+
base::WeakPtrFactory<QuicStreamFactory> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(QuicStreamFactory);
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index ece3e64..4818620 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -17,6 +17,7 @@
#include "net/quic/crypto/proof_verifier_chromium.h"
#include "net/quic/crypto/quic_decrypter.h"
#include "net/quic/crypto/quic_encrypter.h"
+#include "net/quic/crypto/quic_server_info.h"
#include "net/quic/quic_http_stream.h"
#include "net/quic/quic_server_id.h"
#include "net/quic/test_tools/mock_clock.h"
@@ -24,6 +25,7 @@
#include "net/quic/test_tools/mock_random.h"
#include "net/quic/test_tools/quic_test_packet_maker.h"
#include "net/quic/test_tools/quic_test_utils.h"
+#include "net/quic/test_tools/test_task_runner.h"
#include "net/socket/socket_test_util.h"
#include "net/spdy/spdy_test_utils.h"
#include "net/ssl/channel_id_service.h"
@@ -88,13 +90,56 @@
static void DisableConnectionPooling(QuicStreamFactory* factory) {
factory->disable_connection_pooling_ = true;
}
+
+ static void SetTaskRunner(QuicStreamFactory* factory,
+ base::TaskRunner* task_runner) {
+ factory->task_runner_ = task_runner;
+ }
+
+ static void SetLoadServerInfoTimeout(QuicStreamFactory* factory,
+ size_t load_server_info_timeout) {
+ factory->load_server_info_timeout_ms_ = load_server_info_timeout;
+ }
};
+class MockQuicServerInfo : public QuicServerInfo {
+ public:
+ MockQuicServerInfo(const QuicServerId& server_id)
+ : QuicServerInfo(server_id) {}
+ virtual ~MockQuicServerInfo() {}
+
+ virtual void Start() override {};
+
+ virtual int WaitForDataReady(const CompletionCallback& callback) override {
+ return ERR_IO_PENDING;
+ }
+
+ virtual void CancelWaitForDataReadyCallback() override {}
+
+ virtual bool IsDataReady() override { return false; }
+
+ virtual bool IsReadyToPersist() override { return false; }
+
+ virtual void Persist() override {};
+};
+
+class MockQuicServerInfoFactory : public QuicServerInfoFactory {
+ public:
+ MockQuicServerInfoFactory() {}
+ virtual ~MockQuicServerInfoFactory() {}
+
+ virtual QuicServerInfo* GetForServer(const QuicServerId& server_id) override {
+ return new MockQuicServerInfo(server_id);
+ }
+};
+
+
class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> {
protected:
QuicStreamFactoryTest()
: random_generator_(0),
clock_(new MockClock()),
+ runner_(new TestTaskRunner(clock_)),
maker_(GetParam(), 0, clock_),
cert_verifier_(CertVerifier::CreateDefault()),
channel_id_service_(
@@ -115,6 +160,7 @@
/*enable_port_selection=*/true,
/*always_require_handshake_confirmation=*/false,
/*disable_connection_pooling=*/false,
+ /*load_server_info_timeout=*/0u,
QuicTagVector()),
host_port_pair_(kDefaultServerHostName, kDefaultServerPort),
is_https_(false),
@@ -197,11 +243,13 @@
AdjustErrorForVersion(QUIC_RST_FLOW_CONTROL_ACCOUNTING, GetParam()));
}
+ MockQuicServerInfoFactory quic_server_info_factory_;
MockHostResolver host_resolver_;
DeterministicMockClientSocketFactory socket_factory_;
MockCryptoClientStreamFactory crypto_client_stream_factory_;
MockRandom random_generator_;
MockClock* clock_; // Owned by factory_.
+ scoped_refptr<TestTaskRunner> runner_;
QuicTestPacketMaker maker_;
scoped_ptr<CertVerifier> cert_verifier_;
scoped_ptr<ChannelIDService> channel_id_service_;
@@ -1509,5 +1557,48 @@
}
}
+TEST_P(QuicStreamFactoryTest, CancelWaitForDataReady) {
+ factory_.set_quic_server_info_factory(&quic_server_info_factory_);
+ QuicStreamFactoryPeer::SetTaskRunner(&factory_, runner_.get());
+ const size_t kLoadServerInfoTimeoutMs = 50;
+ QuicStreamFactoryPeer::SetLoadServerInfoTimeout(
+ &factory_, kLoadServerInfoTimeoutMs);
+
+ MockRead reads[] = {
+ MockRead(ASYNC, OK, 0) // EOF
+ };
+ DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0);
+ socket_factory_.AddSocketDataProvider(&socket_data);
+ socket_data.StopAfter(1);
+
+ crypto_client_stream_factory_.set_handshake_mode(
+ MockCryptoClientStream::ZERO_RTT);
+ host_resolver_.set_synchronous_mode(true);
+ host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
+ "192.168.0.1", "");
+
+ QuicStreamRequest request(&factory_);
+ EXPECT_EQ(ERR_IO_PENDING,
+ request.Request(host_port_pair_,
+ is_https_,
+ privacy_mode_,
+ "GET",
+ net_log_,
+ callback_.callback()));
+
+ // Verify that the CancelWaitForDataReady task has been posted.
+ ASSERT_EQ(1u, runner_->GetPostedTasks().size());
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(kLoadServerInfoTimeoutMs),
+ runner_->GetPostedTasks()[0].delay);
+
+ runner_->RunNextTask();
+ ASSERT_EQ(0u, runner_->GetPostedTasks().size());
+
+ scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
+ EXPECT_TRUE(stream.get());
+ EXPECT_TRUE(socket_data.at_read_eof());
+ EXPECT_TRUE(socket_data.at_write_eof());
+}
+
} // namespace test
} // namespace net
diff --git a/net/quic/test_tools/crypto_test_utils_nss.cc b/net/quic/test_tools/crypto_test_utils_nss.cc
index 96fdd31..f427750 100644
--- a/net/quic/test_tools/crypto_test_utils_nss.cc
+++ b/net/quic/test_tools/crypto_test_utils_nss.cc
@@ -20,13 +20,11 @@
class TestChannelIDSource : public ChannelIDSource {
public:
- virtual ~TestChannelIDSource() {
- STLDeleteValues(&hostname_to_key_);
- }
+ ~TestChannelIDSource() override { STLDeleteValues(&hostname_to_key_); }
// ChannelIDSource implementation.
- virtual QuicAsyncStatus GetChannelIDKey(
+ QuicAsyncStatus GetChannelIDKey(
const string& hostname,
scoped_ptr<ChannelIDKey>* channel_id_key,
ChannelIDSourceCallback* /*callback*/) override {