| Index: net/url_request/url_request_unittest.cc
|
| diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
|
| index 851dc4b5f55c0ffe9e7fbc4caba7075c00e8f7b2..030a930c90a08be5911d109a08cef96ffd1452b3 100644
|
| --- a/net/url_request/url_request_unittest.cc
|
| +++ b/net/url_request/url_request_unittest.cc
|
| @@ -6577,6 +6577,43 @@ TEST_F(HTTPSRequestTest, TLSv1Fallback) {
|
| EXPECT_TRUE(r.ssl_info().connection_status & SSL_CONNECTION_VERSION_FALLBACK);
|
| }
|
|
|
| +// Tests fallback to TLS 1.1 on connection reset.
|
| +TEST_F(HTTPSRequestTest, TLSv1FallbackReset) {
|
| + // The OpenSSL library in use may not support TLS 1.1.
|
| +#if !defined(USE_OPENSSL)
|
| + EXPECT_GT(kDefaultSSLVersionMax, SSL_PROTOCOL_VERSION_TLS1);
|
| +#endif
|
| + if (kDefaultSSLVersionMax <= SSL_PROTOCOL_VERSION_TLS1)
|
| + return;
|
| +
|
| + SpawnedTestServer::SSLOptions ssl_options(
|
| + SpawnedTestServer::SSLOptions::CERT_OK);
|
| + ssl_options.tls_intolerant =
|
| + SpawnedTestServer::SSLOptions::TLS_INTOLERANT_TLS1_1;
|
| + ssl_options.reset_on_intolerance = true;
|
| + SpawnedTestServer test_server(
|
| + SpawnedTestServer::TYPE_HTTPS,
|
| + ssl_options,
|
| + base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
|
| + ASSERT_TRUE(test_server.Start());
|
| +
|
| + TestDelegate d;
|
| + TestURLRequestContext context(true);
|
| + context.Init();
|
| + d.set_allow_certificate_errors(true);
|
| + URLRequest r(
|
| + test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d, &context);
|
| + r.Start();
|
| +
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_EQ(1, d.response_started_count());
|
| + EXPECT_NE(0, d.bytes_received());
|
| + EXPECT_EQ(static_cast<int>(SSL_CONNECTION_VERSION_TLS1),
|
| + SSLConnectionStatusToVersion(r.ssl_info().connection_status));
|
| + EXPECT_TRUE(r.ssl_info().connection_status & SSL_CONNECTION_VERSION_FALLBACK);
|
| +}
|
| +
|
| // Tests that we don't fallback with servers that implement TLS_FALLBACK_SCSV.
|
| #if defined(USE_OPENSSL)
|
| TEST_F(HTTPSRequestTest, DISABLED_FallbackSCSV) {
|
| @@ -6821,6 +6858,34 @@ TEST_F(HTTPSRequestTest, SSLv3Fallback) {
|
| EXPECT_TRUE(r.ssl_info().connection_status & SSL_CONNECTION_VERSION_FALLBACK);
|
| }
|
|
|
| +// Tests that a reset connection does not fallback down to SSL3.
|
| +TEST_F(HTTPSRequestTest, SSLv3NoFallbackReset) {
|
| + SpawnedTestServer::SSLOptions ssl_options(
|
| + SpawnedTestServer::SSLOptions::CERT_OK);
|
| + ssl_options.tls_intolerant =
|
| + SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL;
|
| + ssl_options.reset_on_intolerance = true;
|
| + SpawnedTestServer test_server(
|
| + SpawnedTestServer::TYPE_HTTPS,
|
| + ssl_options,
|
| + base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
|
| + ASSERT_TRUE(test_server.Start());
|
| +
|
| + TestDelegate d;
|
| + TestURLRequestContext context(true);
|
| + context.Init();
|
| + d.set_allow_certificate_errors(true);
|
| + URLRequest r(
|
| + test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d, &context);
|
| + r.Start();
|
| +
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_FALSE(r.status().is_success());
|
| + EXPECT_EQ(URLRequestStatus::FAILED, r.status().status());
|
| + EXPECT_EQ(ERR_CONNECTION_RESET, r.status().error());
|
| +}
|
| +
|
| namespace {
|
|
|
| class SSLClientAuthTestDelegate : public TestDelegate {
|
|
|