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

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

Issue 2030023005: Disable AltSvc from insecure origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2743
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
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_stream_factory_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9699 matching lines...) Expand 10 before | Expand all | Expand 10 after
9710 9710
9711 alternative_service_vector = 9711 alternative_service_vector =
9712 http_server_properties.GetAlternativeServices(test_server); 9712 http_server_properties.GetAlternativeServices(test_server);
9713 ASSERT_EQ(1u, alternative_service_vector.size()); 9713 ASSERT_EQ(1u, alternative_service_vector.size());
9714 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()), 9714 EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()),
9715 alternative_service_vector[0].protocol); 9715 alternative_service_vector[0].protocol);
9716 EXPECT_EQ("www.example.org", alternative_service_vector[0].host); 9716 EXPECT_EQ("www.example.org", alternative_service_vector[0].host);
9717 EXPECT_EQ(443, alternative_service_vector[0].port); 9717 EXPECT_EQ(443, alternative_service_vector[0].port);
9718 } 9718 }
9719 9719
9720 // Regression test for https://crbug.com/615497.
9721 TEST_P(HttpNetworkTransactionTest,
9722 DoNotParseAlternativeServiceHeaderOnInsecureRequest) {
9723 session_deps_.enable_alternative_service_for_insecure_origins = false;
9724
9725 std::string alternative_service_http_header =
9726 GetAlternativeServiceHttpHeader();
9727
9728 MockRead data_reads[] = {
9729 MockRead("HTTP/1.1 200 OK\r\n"),
9730 MockRead(alternative_service_http_header.c_str()),
9731 MockRead("\r\n"),
9732 MockRead("hello world"),
9733 MockRead(SYNCHRONOUS, OK),
9734 };
9735
9736 HttpRequestInfo request;
9737 request.method = "GET";
9738 request.url = GURL("http://www.example.org/");
9739 request.load_flags = 0;
9740
9741 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0);
9742 session_deps_.socket_factory->AddSocketDataProvider(&data);
9743
9744 TestCompletionCallback callback;
9745
9746 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
9747 std::unique_ptr<HttpTransaction> trans(
9748 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9749
9750 url::SchemeHostPort test_server(request.url);
9751 HttpServerProperties& http_server_properties =
9752 *session->http_server_properties();
9753 AlternativeServiceVector alternative_service_vector =
9754 http_server_properties.GetAlternativeServices(test_server);
9755 EXPECT_TRUE(alternative_service_vector.empty());
9756
9757 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9758 EXPECT_EQ(ERR_IO_PENDING, rv);
9759 EXPECT_EQ(OK, callback.WaitForResult());
9760
9761 const HttpResponseInfo* response = trans->GetResponseInfo();
9762 ASSERT_TRUE(response);
9763 ASSERT_TRUE(response->headers);
9764 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9765 EXPECT_FALSE(response->was_fetched_via_spdy);
9766 EXPECT_FALSE(response->was_npn_negotiated);
9767
9768 std::string response_data;
9769 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9770 EXPECT_EQ("hello world", response_data);
9771
9772 alternative_service_vector =
9773 http_server_properties.GetAlternativeServices(test_server);
9774 EXPECT_TRUE(alternative_service_vector.empty());
9775 }
9776
9720 // HTTP/2 Alternative Services should be disabled if alternative service 9777 // HTTP/2 Alternative Services should be disabled if alternative service
9721 // hostname is different from that of origin. 9778 // hostname is different from that of origin.
9722 // TODO(bnc): Remove when https://crbug.com/615413 is fixed. 9779 // TODO(bnc): Remove when https://crbug.com/615413 is fixed.
9723 TEST_P(HttpNetworkTransactionTest, 9780 TEST_P(HttpNetworkTransactionTest,
9724 DisableHTTP2AlternativeServicesWithDifferentHost) { 9781 DisableHTTP2AlternativeServicesWithDifferentHost) {
9725 session_deps_.enable_alternative_service_with_different_host = true; 9782 session_deps_.enable_alternative_service_with_different_host = true;
9726 9783
9727 HttpRequestInfo request; 9784 HttpRequestInfo request;
9728 request.method = "GET"; 9785 request.method = "GET";
9729 request.url = GURL("http://www.example.org/"); 9786 request.url = GURL("http://www.example.org/");
(...skipping 25 matching lines...) Expand all
9755 9812
9756 std::unique_ptr<HttpTransaction> trans( 9813 std::unique_ptr<HttpTransaction> trans(
9757 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 9814 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9758 TestCompletionCallback callback; 9815 TestCompletionCallback callback;
9759 9816
9760 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 9817 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9761 // Alternative service is not used, request fails. 9818 // Alternative service is not used, request fails.
9762 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv)); 9819 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv));
9763 } 9820 }
9764 9821
9822 // Regression test for https://crbug.com/615497:
9823 // Alternative Services should be disabled for http origin.
9824 TEST_P(HttpNetworkTransactionTest,
9825 DisableAlternativeServicesForInsecureOrigin) {
9826 session_deps_.enable_alternative_service_for_insecure_origins = false;
9827
9828 HttpRequestInfo request;
9829 request.method = "GET";
9830 request.url = GURL("http://www.example.org/");
9831 request.load_flags = 0;
9832
9833 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED);
9834 StaticSocketDataProvider first_data;
9835 first_data.set_connect_data(mock_connect);
9836 session_deps_.socket_factory->AddSocketDataProvider(&first_data);
9837
9838 MockRead data_reads[] = {
9839 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"),
9840 MockRead(ASYNC, OK),
9841 };
9842 StaticSocketDataProvider second_data(data_reads, arraysize(data_reads), NULL,
9843 0);
9844 session_deps_.socket_factory->AddSocketDataProvider(&second_data);
9845
9846 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
9847
9848 base::WeakPtr<HttpServerProperties> http_server_properties =
9849 session->http_server_properties();
9850 AlternativeService alternative_service(
9851 AlternateProtocolFromNextProto(GetProtocol()), "", 444);
9852 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
9853 http_server_properties->SetAlternativeService(
9854 url::SchemeHostPort(request.url), alternative_service, expiration);
9855
9856 std::unique_ptr<HttpTransaction> trans(
9857 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9858 TestCompletionCallback callback;
9859
9860 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9861 // Alternative service is not used, request fails.
9862 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.GetResult(rv));
9863 }
9864
9765 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) { 9865 TEST_P(HttpNetworkTransactionTest, ClearAlternativeServices) {
9766 session_deps_.parse_alternative_services = true; 9866 session_deps_.parse_alternative_services = true;
9767 session_deps_.enable_alternative_service_with_different_host = false; 9867 session_deps_.enable_alternative_service_with_different_host = false;
9768 9868
9769 // Set an alternative service for origin. 9869 // Set an alternative service for origin.
9770 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 9870 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
9771 HttpServerProperties& http_server_properties = 9871 HttpServerProperties& http_server_properties =
9772 *session->http_server_properties(); 9872 *session->http_server_properties();
9773 url::SchemeHostPort test_server("http", "www.example.org", 80); 9873 url::SchemeHostPort test_server("http", "www.example.org", 80);
9774 AlternativeService alternative_service(QUIC, "", 80); 9874 AlternativeService alternative_service(QUIC, "", 80);
(...skipping 6242 matching lines...) Expand 10 before | Expand all | Expand 10 after
16017 base::MessageLoop::current()->RunUntilIdle(); 16117 base::MessageLoop::current()->RunUntilIdle();
16018 16118
16019 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 16119 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
16020 HttpRequestHeaders headers; 16120 HttpRequestHeaders headers;
16021 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 16121 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
16022 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 16122 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
16023 } 16123 }
16024 #endif // !defined(OS_IOS) 16124 #endif // !defined(OS_IOS)
16025 16125
16026 } // namespace net 16126 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_stream_factory_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698