Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 2026863002: Disable AltSvc from insecure origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 9691 matching lines...) Expand 10 before | Expand all | Expand 10 after
9702 9702
9703 alternative_service_vector = 9703 alternative_service_vector =
9704 http_server_properties.GetAlternativeServices(test_server); 9704 http_server_properties.GetAlternativeServices(test_server);
9705 ASSERT_EQ(1u, alternative_service_vector.size()); 9705 ASSERT_EQ(1u, alternative_service_vector.size());
9706 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), 9706 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()),
9707 alternative_service_vector[0].protocol); 9707 alternative_service_vector[0].protocol);
9708 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); 9708 EXPECT_EQ("www.example.org", alternative_service_vector[0].host);
9709 EXPECT_EQ(443, alternative_service_vector[0].port); 9709 EXPECT_EQ(443, alternative_service_vector[0].port);
9710 } 9710 }
9711 9711
9712 // Regression test for https://crbug.com/615497.
9713 TEST_P(HttpNetworkTransactionTest,
9714 DoNotParseAlternativeServiceHeaderOnInsecureRequest) {
9715 session_deps_.enable_alternative_service_for_insecure_origins = false;
9716
9717 std::string alternative_service_http_header =
9718 GetAlternativeServiceHttpHeader();
9719
9720 MockRead data_reads[] = {
9721 MockRead("HTTP/1.1 200 OK\r\n"),
9722 MockRead(alternative_service_http_header.c_str()),
9723 MockRead("\r\n"),
9724 MockRead("hello world"),
9725 MockRead(SYNCHRONOUS, OK),
9726 };
9727
9728 HttpRequestInfo request;
9729 request.method = "GET";
9730 request.url = GURL("http://www.example.org/");
9731 request.load_flags = 0;
9732
9733 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0);
9734 session_deps_.socket_factory->AddSocketDataProvider(&data);
9735
9736 TestCompletionCallback callback;
9737
9738 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
9739 std::unique_ptr<HttpTransaction> trans(
9740 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9741
9742 url::SchemeHostPort test_server(request.url);
9743 HttpServerProperties& http_server_properties =
9744 *session->http_server_properties();
9745 AlternativeServiceVector alternative_service_vector =
9746 http_server_properties.GetAlternativeServices(test_server);
9747 EXPECT_TRUE(alternative_service_vector.empty());
9748
9749 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9750 EXPECT_EQ(ERR_IO_PENDING, rv);
9751 EXPECT_EQ(OK, callback.WaitForResult());
9752
9753 const HttpResponseInfo* response = trans->GetResponseInfo();
9754 ASSERT_TRUE(response);
9755 ASSERT_TRUE(response->headers);
9756 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9757 EXPECT_FALSE(response->was_fetched_via_spdy);
9758 EXPECT_FALSE(response->was_npn_negotiated);
9759
9760 std::string response_data;
9761 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9762 EXPECT_EQ("hello world", response_data);
9763
9764 alternative_service_vector =
9765 http_server_properties.GetAlternativeServices(test_server);
9766 EXPECT_TRUE(alternative_service_vector.empty());
9767 }
9768
9712 // HTTP/2 Alternative Services should be disabled if alternative service 9769 // HTTP/2 Alternative Services should be disabled if alternative service
9713 // hostname is different from that of origin. 9770 // hostname is different from that of origin.
9714 // TODO(bnc): Remove when https://crbug.com/615413 is fixed. 9771 // TODO(bnc): Remove when https://crbug.com/615413 is fixed.
9715 TEST_P(HttpNetworkTransactionTest, 9772 TEST_P(HttpNetworkTransactionTest,
9716 DisableHTTP2AlternativeServicesWithDifferentHost) { 9773 DisableHTTP2AlternativeServicesWithDifferentHost) {
9717 session_deps_.enable_alternative_service_with_different_host = true; 9774 session_deps_.enable_alternative_service_with_different_host = true;
9718 9775
9719 HttpRequestInfo request; 9776 HttpRequestInfo request;
9720 request.method = "GET"; 9777 request.method = "GET";
9721 request.url = GURL("http://www.example.org/"); 9778 request.url = GURL("http://www.example.org/");
(...skipping 25 matching lines...) Expand all
9747 9804
9748 std::unique_ptr<HttpTransaction> trans( 9805 std::unique_ptr<HttpTransaction> trans(
9749 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 9806 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9750 TestCompletionCallback callback; 9807 TestCompletionCallback callback;
9751 9808
9752 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 9809 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9753 // Alternative service is not used, request fails. 9810 // Alternative service is not used, request fails.
9754 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); 9811 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv));
9755 } 9812 }
9756 9813
9814 // Regression test for https://crbug.com/615497:
9815 // Alternative Services should be disabled for http origin.
9816 TEST_P(HttpNetworkTransactionTest,
9817 DisableAlternativeServicesForInsecureOrigin) {
9818 session_deps_.enable_alternative_service_for_insecure_origins = false;
9819
9820 HttpRequestInfo request;
9821 request.method = "GET";
9822 request.url = GURL("http://www.example.org/");
9823 request.load_flags = 0;
9824
9825 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED);
9826 StaticSocketDataProvider first_data;
9827 first_data.set_connect_data(mock_connect);
9828 session_deps_.socket_factory->AddSocketDataProvider(&first_data);
9829
9830 MockRead data_reads[] = {
9831 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"),
9832 MockRead(ASYNC, OK),
9833 };
9834 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL,
9835 0);
9836 session_deps_.socket_factory->AddSocketDataProvider(&second_data);
9837
9838 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
9839
9840 base::WeakPtr<HttpServerProperties> http_server_properties =
9841 session->http_server_properties();
9842 AlternativeService alternative_service(
9843 AlternateProtocolFromNextProto(GetProtocol()), "", 444);
9844 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
9845 http_server_properties->SetAlternativeService(
9846 url::SchemeHostPort(request.url), alternative_service, expiration);
9847
9848 std::unique_ptr<HttpTransaction> trans(
9849 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9850 TestCompletionCallback callback;
9851
9852 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9853 // Alternative service is not used, request fails.
9854 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv));
9855 }
9856
9757 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { 9857 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) {
9758 session_deps_.enable_alternative_service_with_different_host = false; 9858 session_deps_.enable_alternative_service_with_different_host = false;
9759 9859
9760 // Set an alternative service for origin. 9860 // Set an alternative service for origin.
9761 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 9861 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
9762 HttpServerProperties& http_server_properties = 9862 HttpServerProperties& http_server_properties =
9763 *session->http_server_properties(); 9863 *session->http_server_properties();
9764 url::SchemeHostPort test_server("http", "www.example.org", 80); 9864 url::SchemeHostPort test_server("http", "www.example.org", 80);
9765 AlternativeService alternative_service(QUIC, "", 80); 9865 AlternativeService alternative_service(QUIC, "", 80);
9766 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 9866 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
(...skipping 5966 matching lines...) Expand 10 before | Expand all | Expand 10 after
15733 base::MessageLoop::current()->RunUntilIdle(); 15833 base::MessageLoop::current()->RunUntilIdle();
15734 15834
15735 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 15835 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
15736 HttpRequestHeaders headers; 15836 HttpRequestHeaders headers;
15737 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 15837 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
15738 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 15838 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
15739 } 15839 }
15740 #endif // !defined(OS_IOS) 15840 #endif // !defined(OS_IOS)
15741 15841
15742 } // namespace net 15842 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698