| OLD | NEW |
| 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 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPort) { | 840 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPort) { |
| 841 MockRead data_reads[] = { | 841 MockRead data_reads[] = { |
| 842 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), | 842 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 843 }; | 843 }; |
| 844 | 844 |
| 845 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | 845 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
| 846 session_deps_.socket_factory->AddSocketDataProvider(&data); | 846 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 847 | 847 |
| 848 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 848 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 849 | 849 |
| 850 HttpRequestInfo request; |
| 850 std::unique_ptr<HttpTransaction> trans( | 851 std::unique_ptr<HttpTransaction> trans( |
| 851 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 852 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 852 | 853 |
| 853 HttpRequestInfo request; | |
| 854 request.method = "GET"; | 854 request.method = "GET"; |
| 855 request.url = GURL("http://www.example.com:2000/"); | 855 request.url = GURL("http://www.example.com:2000/"); |
| 856 TestCompletionCallback callback; | 856 TestCompletionCallback callback; |
| 857 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 857 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 858 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_INVALID_HTTP_RESPONSE)); | 858 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_INVALID_HTTP_RESPONSE)); |
| 859 } | 859 } |
| 860 | 860 |
| 861 // Response with no status line, and a weird port. Option to allow weird ports | 861 // Response with no status line, and a weird port. Option to allow weird ports |
| 862 // enabled. | 862 // enabled. |
| 863 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPortAllowed) { | 863 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPortAllowed) { |
| 864 MockRead data_reads[] = { | 864 MockRead data_reads[] = { |
| 865 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), | 865 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 866 }; | 866 }; |
| 867 | 867 |
| 868 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | 868 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); |
| 869 session_deps_.socket_factory->AddSocketDataProvider(&data); | 869 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 870 session_deps_.http_09_on_non_default_ports_enabled = true; | 870 session_deps_.http_09_on_non_default_ports_enabled = true; |
| 871 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 871 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 872 | 872 |
| 873 HttpRequestInfo request; |
| 873 std::unique_ptr<HttpTransaction> trans( | 874 std::unique_ptr<HttpTransaction> trans( |
| 874 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 875 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 875 | 876 |
| 876 HttpRequestInfo request; | |
| 877 request.method = "GET"; | 877 request.method = "GET"; |
| 878 request.url = GURL("http://www.example.com:2000/"); | 878 request.url = GURL("http://www.example.com:2000/"); |
| 879 TestCompletionCallback callback; | 879 TestCompletionCallback callback; |
| 880 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); | 880 int rv = trans->Start(&request, callback.callback(), NetLogWithSource()); |
| 881 EXPECT_THAT(callback.GetResult(rv), IsOk()); | 881 EXPECT_THAT(callback.GetResult(rv), IsOk()); |
| 882 | 882 |
| 883 const HttpResponseInfo* info = trans->GetResponseInfo(); | 883 const HttpResponseInfo* info = trans->GetResponseInfo(); |
| 884 ASSERT_TRUE(info->headers); | 884 ASSERT_TRUE(info->headers); |
| 885 EXPECT_EQ("HTTP/0.9 200 OK", info->headers->GetStatusLine()); | 885 EXPECT_EQ("HTTP/0.9 200 OK", info->headers->GetStatusLine()); |
| 886 | 886 |
| (...skipping 9499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10386 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10386 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10387 HttpServerProperties* http_server_properties = | 10387 HttpServerProperties* http_server_properties = |
| 10388 session->http_server_properties(); | 10388 session->http_server_properties(); |
| 10389 AlternativeService alternative_service(kProtoQUIC, alternative); | 10389 AlternativeService alternative_service(kProtoQUIC, alternative); |
| 10390 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 10390 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 10391 http_server_properties->SetAlternativeService(server, alternative_service, | 10391 http_server_properties->SetAlternativeService(server, alternative_service, |
| 10392 expiration); | 10392 expiration); |
| 10393 // Mark the QUIC alternative service as broken. | 10393 // Mark the QUIC alternative service as broken. |
| 10394 http_server_properties->MarkAlternativeServiceBroken(alternative_service); | 10394 http_server_properties->MarkAlternativeServiceBroken(alternative_service); |
| 10395 | 10395 |
| 10396 HttpRequestInfo request; |
| 10396 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10397 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 10397 HttpRequestInfo request; | |
| 10398 request.method = "GET"; | 10398 request.method = "GET"; |
| 10399 request.url = GURL(origin_url); | 10399 request.url = GURL(origin_url); |
| 10400 TestCompletionCallback callback; | 10400 TestCompletionCallback callback; |
| 10401 NetErrorDetails details; | 10401 NetErrorDetails details; |
| 10402 EXPECT_FALSE(details.quic_broken); | 10402 EXPECT_FALSE(details.quic_broken); |
| 10403 | 10403 |
| 10404 trans.Start(&request, callback.callback(), NetLogWithSource()); | 10404 trans.Start(&request, callback.callback(), NetLogWithSource()); |
| 10405 trans.PopulateNetErrorDetails(&details); | 10405 trans.PopulateNetErrorDetails(&details); |
| 10406 EXPECT_TRUE(details.quic_broken); | 10406 EXPECT_TRUE(details.quic_broken); |
| 10407 } | 10407 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10459 | 10459 |
| 10460 http_server_properties->SetAlternativeServices( | 10460 http_server_properties->SetAlternativeServices( |
| 10461 server, alternative_service_info_vector); | 10461 server, alternative_service_info_vector); |
| 10462 | 10462 |
| 10463 // Mark one of the QUIC alternative service as broken. | 10463 // Mark one of the QUIC alternative service as broken. |
| 10464 http_server_properties->MarkAlternativeServiceBroken(alternative_service1); | 10464 http_server_properties->MarkAlternativeServiceBroken(alternative_service1); |
| 10465 | 10465 |
| 10466 const AlternativeServiceVector alternative_service_vector = | 10466 const AlternativeServiceVector alternative_service_vector = |
| 10467 http_server_properties->GetAlternativeServices(server); | 10467 http_server_properties->GetAlternativeServices(server); |
| 10468 | 10468 |
| 10469 HttpRequestInfo request; |
| 10469 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 10470 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 10470 HttpRequestInfo request; | |
| 10471 request.method = "GET"; | 10471 request.method = "GET"; |
| 10472 request.url = GURL(origin_url); | 10472 request.url = GURL(origin_url); |
| 10473 TestCompletionCallback callback; | 10473 TestCompletionCallback callback; |
| 10474 NetErrorDetails details; | 10474 NetErrorDetails details; |
| 10475 EXPECT_FALSE(details.quic_broken); | 10475 EXPECT_FALSE(details.quic_broken); |
| 10476 | 10476 |
| 10477 trans.Start(&request, callback.callback(), NetLogWithSource()); | 10477 trans.Start(&request, callback.callback(), NetLogWithSource()); |
| 10478 trans.PopulateNetErrorDetails(&details); | 10478 trans.PopulateNetErrorDetails(&details); |
| 10479 EXPECT_FALSE(details.quic_broken); | 10479 EXPECT_FALSE(details.quic_broken); |
| 10480 } | 10480 } |
| (...skipping 3330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13811 | 13811 |
| 13812 // Set up alternative service for server. | 13812 // Set up alternative service for server. |
| 13813 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13813 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 13814 HttpServerProperties* http_server_properties = | 13814 HttpServerProperties* http_server_properties = |
| 13815 session->http_server_properties(); | 13815 session->http_server_properties(); |
| 13816 AlternativeService alternative_service(kProtoHTTP2, alternative); | 13816 AlternativeService alternative_service(kProtoHTTP2, alternative); |
| 13817 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 13817 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 13818 http_server_properties->SetAlternativeService(server, alternative_service, | 13818 http_server_properties->SetAlternativeService(server, alternative_service, |
| 13819 expiration); | 13819 expiration); |
| 13820 | 13820 |
| 13821 HttpRequestInfo request; |
| 13821 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); | 13822 HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); |
| 13822 HttpRequestInfo request; | |
| 13823 request.method = "GET"; | 13823 request.method = "GET"; |
| 13824 request.url = GURL("https://www.example.org:443"); | 13824 request.url = GURL("https://www.example.org:443"); |
| 13825 TestCompletionCallback callback; | 13825 TestCompletionCallback callback; |
| 13826 | 13826 |
| 13827 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is | 13827 // HTTP/2 (or SPDY) is required for alternative service, if HTTP/1.1 is |
| 13828 // negotiated, the alternate Job should fail with ERR_ALPN_NEGOTIATION_FAILED. | 13828 // negotiated, the alternate Job should fail with ERR_ALPN_NEGOTIATION_FAILED. |
| 13829 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); | 13829 int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); |
| 13830 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_ALPN_NEGOTIATION_FAILED)); | 13830 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_ALPN_NEGOTIATION_FAILED)); |
| 13831 } | 13831 } |
| 13832 | 13832 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13986 // Set up alternative service for server. | 13986 // Set up alternative service for server. |
| 13987 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13987 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 13988 HttpServerProperties* http_server_properties = | 13988 HttpServerProperties* http_server_properties = |
| 13989 session->http_server_properties(); | 13989 session->http_server_properties(); |
| 13990 AlternativeService alternative_service(kProtoHTTP2, alternative); | 13990 AlternativeService alternative_service(kProtoHTTP2, alternative); |
| 13991 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 13991 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
| 13992 http_server_properties->SetAlternativeService(server, alternative_service, | 13992 http_server_properties->SetAlternativeService(server, alternative_service, |
| 13993 expiration); | 13993 expiration); |
| 13994 | 13994 |
| 13995 // First transaction to alternative to open an HTTP/1.1 socket. | 13995 // First transaction to alternative to open an HTTP/1.1 socket. |
| 13996 HttpRequestInfo request1; |
| 13996 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 13997 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 13997 HttpRequestInfo request1; | |
| 13998 request1.method = "GET"; | 13998 request1.method = "GET"; |
| 13999 request1.url = GURL(alternative_url); | 13999 request1.url = GURL(alternative_url); |
| 14000 request1.load_flags = 0; | 14000 request1.load_flags = 0; |
| 14001 TestCompletionCallback callback1; | 14001 TestCompletionCallback callback1; |
| 14002 | 14002 |
| 14003 int rv = trans1.Start(&request1, callback1.callback(), NetLogWithSource()); | 14003 int rv = trans1.Start(&request1, callback1.callback(), NetLogWithSource()); |
| 14004 EXPECT_THAT(callback1.GetResult(rv), IsOk()); | 14004 EXPECT_THAT(callback1.GetResult(rv), IsOk()); |
| 14005 const HttpResponseInfo* response1 = trans1.GetResponseInfo(); | 14005 const HttpResponseInfo* response1 = trans1.GetResponseInfo(); |
| 14006 ASSERT_TRUE(response1); | 14006 ASSERT_TRUE(response1); |
| 14007 ASSERT_TRUE(response1->headers); | 14007 ASSERT_TRUE(response1->headers); |
| 14008 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); | 14008 EXPECT_EQ("HTTP/1.1 200 OK", response1->headers->GetStatusLine()); |
| 14009 EXPECT_TRUE(response1->was_alpn_negotiated); | 14009 EXPECT_TRUE(response1->was_alpn_negotiated); |
| 14010 EXPECT_FALSE(response1->was_fetched_via_spdy); | 14010 EXPECT_FALSE(response1->was_fetched_via_spdy); |
| 14011 std::string response_data1; | 14011 std::string response_data1; |
| 14012 ASSERT_THAT(ReadTransaction(&trans1, &response_data1), IsOk()); | 14012 ASSERT_THAT(ReadTransaction(&trans1, &response_data1), IsOk()); |
| 14013 EXPECT_EQ("first HTTP/1.1 response from alternative", response_data1); | 14013 EXPECT_EQ("first HTTP/1.1 response from alternative", response_data1); |
| 14014 | 14014 |
| 14015 // Request for origin.example.org, which has an alternative service. This | 14015 // Request for origin.example.org, which has an alternative service. This |
| 14016 // will start two Jobs: the alternative looks for connections to pool to, | 14016 // will start two Jobs: the alternative looks for connections to pool to, |
| 14017 // finds one which is HTTP/1.1, and should ignore it, and should not try to | 14017 // finds one which is HTTP/1.1, and should ignore it, and should not try to |
| 14018 // open other connections to alternative server. The Job to server fails, so | 14018 // open other connections to alternative server. The Job to server fails, so |
| 14019 // this request fails. | 14019 // this request fails. |
| 14020 HttpRequestInfo request2; |
| 14020 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); | 14021 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, session.get()); |
| 14021 HttpRequestInfo request2; | |
| 14022 request2.method = "GET"; | 14022 request2.method = "GET"; |
| 14023 request2.url = GURL(origin_url); | 14023 request2.url = GURL(origin_url); |
| 14024 request2.load_flags = 0; | 14024 request2.load_flags = 0; |
| 14025 TestCompletionCallback callback2; | 14025 TestCompletionCallback callback2; |
| 14026 | 14026 |
| 14027 rv = trans2.Start(&request2, callback2.callback(), NetLogWithSource()); | 14027 rv = trans2.Start(&request2, callback2.callback(), NetLogWithSource()); |
| 14028 EXPECT_THAT(callback2.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); | 14028 EXPECT_THAT(callback2.GetResult(rv), IsError(ERR_CONNECTION_REFUSED)); |
| 14029 | 14029 |
| 14030 // Another transaction to alternative. This is to test that the HTTP/1.1 | 14030 // Another transaction to alternative. This is to test that the HTTP/1.1 |
| 14031 // socket is still open and in the pool. | 14031 // socket is still open and in the pool. |
| 14032 HttpRequestInfo request3; |
| 14032 HttpNetworkTransaction trans3(DEFAULT_PRIORITY, session.get()); | 14033 HttpNetworkTransaction trans3(DEFAULT_PRIORITY, session.get()); |
| 14033 HttpRequestInfo request3; | |
| 14034 request3.method = "GET"; | 14034 request3.method = "GET"; |
| 14035 request3.url = GURL(alternative_url); | 14035 request3.url = GURL(alternative_url); |
| 14036 request3.load_flags = 0; | 14036 request3.load_flags = 0; |
| 14037 TestCompletionCallback callback3; | 14037 TestCompletionCallback callback3; |
| 14038 | 14038 |
| 14039 rv = trans3.Start(&request3, callback3.callback(), NetLogWithSource()); | 14039 rv = trans3.Start(&request3, callback3.callback(), NetLogWithSource()); |
| 14040 EXPECT_THAT(callback3.GetResult(rv), IsOk()); | 14040 EXPECT_THAT(callback3.GetResult(rv), IsOk()); |
| 14041 const HttpResponseInfo* response3 = trans3.GetResponseInfo(); | 14041 const HttpResponseInfo* response3 = trans3.GetResponseInfo(); |
| 14042 ASSERT_TRUE(response3); | 14042 ASSERT_TRUE(response3); |
| 14043 ASSERT_TRUE(response3->headers); | 14043 ASSERT_TRUE(response3->headers); |
| (...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15133 } // namespace | 15133 } // namespace |
| 15134 | 15134 |
| 15135 // Make sure that HttpNetworkTransaction passes on its priority to its | 15135 // Make sure that HttpNetworkTransaction passes on its priority to its |
| 15136 // stream request on start. | 15136 // stream request on start. |
| 15137 TEST_F(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) { | 15137 TEST_F(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) { |
| 15138 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15138 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15139 HttpNetworkSessionPeer peer(session.get()); | 15139 HttpNetworkSessionPeer peer(session.get()); |
| 15140 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 15140 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
| 15141 peer.SetHttpStreamFactory(std::unique_ptr<HttpStreamFactory>(fake_factory)); | 15141 peer.SetHttpStreamFactory(std::unique_ptr<HttpStreamFactory>(fake_factory)); |
| 15142 | 15142 |
| 15143 HttpRequestInfo request; |
| 15143 HttpNetworkTransaction trans(LOW, session.get()); | 15144 HttpNetworkTransaction trans(LOW, session.get()); |
| 15144 | 15145 |
| 15145 ASSERT_FALSE(fake_factory->last_stream_request()); | 15146 ASSERT_FALSE(fake_factory->last_stream_request()); |
| 15146 | 15147 |
| 15147 HttpRequestInfo request; | |
| 15148 TestCompletionCallback callback; | 15148 TestCompletionCallback callback; |
| 15149 EXPECT_EQ(ERR_IO_PENDING, | 15149 EXPECT_EQ(ERR_IO_PENDING, |
| 15150 trans.Start(&request, callback.callback(), NetLogWithSource())); | 15150 trans.Start(&request, callback.callback(), NetLogWithSource())); |
| 15151 | 15151 |
| 15152 base::WeakPtr<FakeStreamRequest> fake_request = | 15152 base::WeakPtr<FakeStreamRequest> fake_request = |
| 15153 fake_factory->last_stream_request(); | 15153 fake_factory->last_stream_request(); |
| 15154 ASSERT_TRUE(fake_request); | 15154 ASSERT_TRUE(fake_request); |
| 15155 EXPECT_EQ(LOW, fake_request->priority()); | 15155 EXPECT_EQ(LOW, fake_request->priority()); |
| 15156 } | 15156 } |
| 15157 | 15157 |
| 15158 // Make sure that HttpNetworkTransaction passes on its priority | 15158 // Make sure that HttpNetworkTransaction passes on its priority |
| 15159 // updates to its stream request. | 15159 // updates to its stream request. |
| 15160 TEST_F(HttpNetworkTransactionTest, SetStreamRequestPriority) { | 15160 TEST_F(HttpNetworkTransactionTest, SetStreamRequestPriority) { |
| 15161 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15161 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15162 HttpNetworkSessionPeer peer(session.get()); | 15162 HttpNetworkSessionPeer peer(session.get()); |
| 15163 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 15163 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
| 15164 peer.SetHttpStreamFactory(std::unique_ptr<HttpStreamFactory>(fake_factory)); | 15164 peer.SetHttpStreamFactory(std::unique_ptr<HttpStreamFactory>(fake_factory)); |
| 15165 | 15165 |
| 15166 HttpRequestInfo request; |
| 15166 HttpNetworkTransaction trans(LOW, session.get()); | 15167 HttpNetworkTransaction trans(LOW, session.get()); |
| 15167 | 15168 |
| 15168 HttpRequestInfo request; | |
| 15169 TestCompletionCallback callback; | 15169 TestCompletionCallback callback; |
| 15170 EXPECT_EQ(ERR_IO_PENDING, | 15170 EXPECT_EQ(ERR_IO_PENDING, |
| 15171 trans.Start(&request, callback.callback(), NetLogWithSource())); | 15171 trans.Start(&request, callback.callback(), NetLogWithSource())); |
| 15172 | 15172 |
| 15173 base::WeakPtr<FakeStreamRequest> fake_request = | 15173 base::WeakPtr<FakeStreamRequest> fake_request = |
| 15174 fake_factory->last_stream_request(); | 15174 fake_factory->last_stream_request(); |
| 15175 ASSERT_TRUE(fake_request); | 15175 ASSERT_TRUE(fake_request); |
| 15176 EXPECT_EQ(LOW, fake_request->priority()); | 15176 EXPECT_EQ(LOW, fake_request->priority()); |
| 15177 | 15177 |
| 15178 trans.SetPriority(LOWEST); | 15178 trans.SetPriority(LOWEST); |
| 15179 ASSERT_TRUE(fake_request); | 15179 ASSERT_TRUE(fake_request); |
| 15180 EXPECT_EQ(LOWEST, fake_request->priority()); | 15180 EXPECT_EQ(LOWEST, fake_request->priority()); |
| 15181 } | 15181 } |
| 15182 | 15182 |
| 15183 // Make sure that HttpNetworkTransaction passes on its priority | 15183 // Make sure that HttpNetworkTransaction passes on its priority |
| 15184 // updates to its stream. | 15184 // updates to its stream. |
| 15185 TEST_F(HttpNetworkTransactionTest, SetStreamPriority) { | 15185 TEST_F(HttpNetworkTransactionTest, SetStreamPriority) { |
| 15186 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15186 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15187 HttpNetworkSessionPeer peer(session.get()); | 15187 HttpNetworkSessionPeer peer(session.get()); |
| 15188 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 15188 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
| 15189 peer.SetHttpStreamFactory(std::unique_ptr<HttpStreamFactory>(fake_factory)); | 15189 peer.SetHttpStreamFactory(std::unique_ptr<HttpStreamFactory>(fake_factory)); |
| 15190 | 15190 |
| 15191 HttpRequestInfo request; |
| 15191 HttpNetworkTransaction trans(LOW, session.get()); | 15192 HttpNetworkTransaction trans(LOW, session.get()); |
| 15192 | 15193 |
| 15193 HttpRequestInfo request; | |
| 15194 TestCompletionCallback callback; | 15194 TestCompletionCallback callback; |
| 15195 EXPECT_EQ(ERR_IO_PENDING, | 15195 EXPECT_EQ(ERR_IO_PENDING, |
| 15196 trans.Start(&request, callback.callback(), NetLogWithSource())); | 15196 trans.Start(&request, callback.callback(), NetLogWithSource())); |
| 15197 | 15197 |
| 15198 base::WeakPtr<FakeStreamRequest> fake_request = | 15198 base::WeakPtr<FakeStreamRequest> fake_request = |
| 15199 fake_factory->last_stream_request(); | 15199 fake_factory->last_stream_request(); |
| 15200 ASSERT_TRUE(fake_request); | 15200 ASSERT_TRUE(fake_request); |
| 15201 base::WeakPtr<FakeStream> fake_stream = fake_request->FinishStreamRequest(); | 15201 base::WeakPtr<FakeStream> fake_stream = fake_request->FinishStreamRequest(); |
| 15202 ASSERT_TRUE(fake_stream); | 15202 ASSERT_TRUE(fake_stream); |
| 15203 EXPECT_EQ(LOW, fake_stream->priority()); | 15203 EXPECT_EQ(LOW, fake_stream->priority()); |
| 15204 | 15204 |
| 15205 trans.SetPriority(LOWEST); | 15205 trans.SetPriority(LOWEST); |
| 15206 EXPECT_EQ(LOWEST, fake_stream->priority()); | 15206 EXPECT_EQ(LOWEST, fake_stream->priority()); |
| 15207 } | 15207 } |
| 15208 | 15208 |
| 15209 TEST_F(HttpNetworkTransactionTest, CreateWebSocketHandshakeStream) { | 15209 TEST_F(HttpNetworkTransactionTest, CreateWebSocketHandshakeStream) { |
| 15210 // The same logic needs to be tested for both ws: and wss: schemes, but this | 15210 // The same logic needs to be tested for both ws: and wss: schemes, but this |
| 15211 // test is already parameterised on NextProto, so it uses a loop to verify | 15211 // test is already parameterised on NextProto, so it uses a loop to verify |
| 15212 // that the different schemes work. | 15212 // that the different schemes work. |
| 15213 std::string test_cases[] = {"ws://www.example.org/", | 15213 std::string test_cases[] = {"ws://www.example.org/", |
| 15214 "wss://www.example.org/"}; | 15214 "wss://www.example.org/"}; |
| 15215 for (size_t i = 0; i < arraysize(test_cases); ++i) { | 15215 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
| 15216 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 15216 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 15217 HttpNetworkSessionPeer peer(session.get()); | 15217 HttpNetworkSessionPeer peer(session.get()); |
| 15218 FakeStreamFactory* fake_factory = new FakeStreamFactory(); | 15218 FakeStreamFactory* fake_factory = new FakeStreamFactory(); |
| 15219 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; | 15219 FakeWebSocketStreamCreateHelper websocket_stream_create_helper; |
| 15220 peer.SetHttpStreamFactoryForWebSocket( | 15220 peer.SetHttpStreamFactoryForWebSocket( |
| 15221 std::unique_ptr<HttpStreamFactory>(fake_factory)); | 15221 std::unique_ptr<HttpStreamFactory>(fake_factory)); |
| 15222 | 15222 |
| 15223 HttpRequestInfo request; |
| 15223 HttpNetworkTransaction trans(LOW, session.get()); | 15224 HttpNetworkTransaction trans(LOW, session.get()); |
| 15224 trans.SetWebSocketHandshakeStreamCreateHelper( | 15225 trans.SetWebSocketHandshakeStreamCreateHelper( |
| 15225 &websocket_stream_create_helper); | 15226 &websocket_stream_create_helper); |
| 15226 | 15227 |
| 15227 HttpRequestInfo request; | |
| 15228 TestCompletionCallback callback; | 15228 TestCompletionCallback callback; |
| 15229 request.method = "GET"; | 15229 request.method = "GET"; |
| 15230 request.url = GURL(test_cases[i]); | 15230 request.url = GURL(test_cases[i]); |
| 15231 | 15231 |
| 15232 EXPECT_EQ(ERR_IO_PENDING, | 15232 EXPECT_EQ(ERR_IO_PENDING, |
| 15233 trans.Start(&request, callback.callback(), NetLogWithSource())); | 15233 trans.Start(&request, callback.callback(), NetLogWithSource())); |
| 15234 | 15234 |
| 15235 base::WeakPtr<FakeStreamRequest> fake_request = | 15235 base::WeakPtr<FakeStreamRequest> fake_request = |
| 15236 fake_factory->last_stream_request(); | 15236 fake_factory->last_stream_request(); |
| 15237 ASSERT_TRUE(fake_request); | 15237 ASSERT_TRUE(fake_request); |
| (...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16501 base::RunLoop().RunUntilIdle(); | 16501 base::RunLoop().RunUntilIdle(); |
| 16502 | 16502 |
| 16503 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 16503 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
| 16504 HttpRequestHeaders headers; | 16504 HttpRequestHeaders headers; |
| 16505 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 16505 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
| 16506 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 16506 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
| 16507 } | 16507 } |
| 16508 #endif // !defined(OS_IOS) | 16508 #endif // !defined(OS_IOS) |
| 16509 | 16509 |
| 16510 } // namespace net | 16510 } // namespace net |
| OLD | NEW |