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 <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 } | 258 } |
259 | 259 |
260 virtual void TearDown() { | 260 virtual void TearDown() { |
261 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 261 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
262 base::MessageLoop::current()->RunUntilIdle(); | 262 base::MessageLoop::current()->RunUntilIdle(); |
263 // Empty the current queue. | 263 // Empty the current queue. |
264 base::MessageLoop::current()->RunUntilIdle(); | 264 base::MessageLoop::current()->RunUntilIdle(); |
265 PlatformTest::TearDown(); | 265 PlatformTest::TearDown(); |
266 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 266 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
267 base::MessageLoop::current()->RunUntilIdle(); | 267 base::MessageLoop::current()->RunUntilIdle(); |
268 HttpStreamFactory::set_use_alternate_protocols(false); | |
269 HttpStreamFactory::SetNextProtos(std::vector<NextProto>()); | |
270 } | 268 } |
271 | 269 |
272 // This is the expected return from a current server advertising SPDY. | 270 // This is the expected return from a current server advertising SPDY. |
273 std::string GetAlternateProtocolHttpHeader() { | 271 std::string GetAlternateProtocolHttpHeader() { |
274 return | 272 return |
275 std::string("Alternate-Protocol: 443:") + | 273 std::string("Alternate-Protocol: 443:") + |
276 AlternateProtocolToString(AlternateProtocolFromNextProto(GetParam())) + | 274 AlternateProtocolToString(AlternateProtocolFromNextProto(GetParam())) + |
277 "\r\n\r\n"; | 275 "\r\n\r\n"; |
278 } | 276 } |
279 | 277 |
(...skipping 1101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1381 data2_reads.push_back(MockRead(ASYNC, kHttpData, strlen(kHttpData), 2)); | 1379 data2_reads.push_back(MockRead(ASYNC, kHttpData, strlen(kHttpData), 2)); |
1382 data2_reads.push_back(MockRead(ASYNC, OK, 3)); | 1380 data2_reads.push_back(MockRead(ASYNC, OK, 3)); |
1383 } | 1381 } |
1384 OrderedSocketData data2(&data2_reads[0], data2_reads.size(), | 1382 OrderedSocketData data2(&data2_reads[0], data2_reads.size(), |
1385 &data2_writes[0], data2_writes.size()); | 1383 &data2_writes[0], data2_writes.size()); |
1386 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1384 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
1387 | 1385 |
1388 // Preconnect a socket. | 1386 // Preconnect a socket. |
1389 net::SSLConfig ssl_config; | 1387 net::SSLConfig ssl_config; |
1390 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 1388 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
1391 if (session->http_stream_factory()->has_next_protos()) | 1389 session->GetNextProtos(&ssl_config.next_protos); |
1392 ssl_config.next_protos = session->http_stream_factory()->next_protos(); | |
1393 session->http_stream_factory()->PreconnectStreams( | 1390 session->http_stream_factory()->PreconnectStreams( |
1394 1, request, DEFAULT_PRIORITY, ssl_config, ssl_config); | 1391 1, request, DEFAULT_PRIORITY, ssl_config, ssl_config); |
1395 // Wait for the preconnect to complete. | 1392 // Wait for the preconnect to complete. |
1396 // TODO(davidben): Some way to wait for an idle socket count might be handy. | 1393 // TODO(davidben): Some way to wait for an idle socket count might be handy. |
1397 base::RunLoop().RunUntilIdle(); | 1394 base::RunLoop().RunUntilIdle(); |
1398 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 1395 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
1399 | 1396 |
1400 // Make the request. | 1397 // Make the request. |
1401 TestCompletionCallback callback; | 1398 TestCompletionCallback callback; |
1402 | 1399 |
(...skipping 6069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7472 true, | 7469 true, |
7473 }, | 7470 }, |
7474 { | 7471 { |
7475 "", // unused | 7472 "", // unused |
7476 "http://host.with.alternate/direct", | 7473 "http://host.with.alternate/direct", |
7477 "ssl/host.with.alternate:443", | 7474 "ssl/host.with.alternate:443", |
7478 true, | 7475 true, |
7479 }, | 7476 }, |
7480 }; | 7477 }; |
7481 | 7478 |
7482 HttpStreamFactory::set_use_alternate_protocols(true); | 7479 session_deps_.use_alternate_protocols = true; |
7483 | 7480 |
7484 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 7481 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
7485 session_deps_.proxy_service.reset( | 7482 session_deps_.proxy_service.reset( |
7486 ProxyService::CreateFixed(tests[i].proxy_server)); | 7483 ProxyService::CreateFixed(tests[i].proxy_server)); |
7487 scoped_refptr<HttpNetworkSession> session( | 7484 scoped_refptr<HttpNetworkSession> session( |
7488 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7485 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
7489 | 7486 |
7490 HttpNetworkSessionPeer peer(session); | 7487 HttpNetworkSessionPeer peer(session); |
7491 CaptureGroupNameTransportSocketPool* transport_conn_pool = | 7488 CaptureGroupNameTransportSocketPool* transport_conn_pool = |
7492 new CaptureGroupNameTransportSocketPool(NULL, NULL); | 7489 new CaptureGroupNameTransportSocketPool(NULL, NULL); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7536 }, | 7533 }, |
7537 | 7534 |
7538 { | 7535 { |
7539 "http_proxy", | 7536 "http_proxy", |
7540 "ftp://ftp.google.com/http_proxy_normal", | 7537 "ftp://ftp.google.com/http_proxy_normal", |
7541 "ftp/ftp.google.com:21", | 7538 "ftp/ftp.google.com:21", |
7542 false, | 7539 false, |
7543 }, | 7540 }, |
7544 }; | 7541 }; |
7545 | 7542 |
7546 HttpStreamFactory::set_use_alternate_protocols(true); | 7543 session_deps_.use_alternate_protocols = true; |
7547 | 7544 |
7548 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 7545 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
7549 session_deps_.proxy_service.reset( | 7546 session_deps_.proxy_service.reset( |
7550 ProxyService::CreateFixed(tests[i].proxy_server)); | 7547 ProxyService::CreateFixed(tests[i].proxy_server)); |
7551 scoped_refptr<HttpNetworkSession> session( | 7548 scoped_refptr<HttpNetworkSession> session( |
7552 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7549 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
7553 | 7550 |
7554 HttpNetworkSessionPeer peer(session); | 7551 HttpNetworkSessionPeer peer(session); |
7555 | 7552 |
7556 HostPortPair proxy_host("http_proxy", 80); | 7553 HostPortPair proxy_host("http_proxy", 80); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7607 }, | 7604 }, |
7608 | 7605 |
7609 { | 7606 { |
7610 "socks4://socks_proxy:1080", | 7607 "socks4://socks_proxy:1080", |
7611 "http://host.with.alternate/direct", | 7608 "http://host.with.alternate/direct", |
7612 "socks4/ssl/host.with.alternate:443", | 7609 "socks4/ssl/host.with.alternate:443", |
7613 true, | 7610 true, |
7614 }, | 7611 }, |
7615 }; | 7612 }; |
7616 | 7613 |
7617 HttpStreamFactory::set_use_alternate_protocols(true); | 7614 session_deps_.use_alternate_protocols = true; |
7618 | 7615 |
7619 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 7616 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
7620 session_deps_.proxy_service.reset( | 7617 session_deps_.proxy_service.reset( |
7621 ProxyService::CreateFixed(tests[i].proxy_server)); | 7618 ProxyService::CreateFixed(tests[i].proxy_server)); |
7622 scoped_refptr<HttpNetworkSession> session( | 7619 scoped_refptr<HttpNetworkSession> session( |
7623 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7620 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
7624 | 7621 |
7625 HttpNetworkSessionPeer peer(session); | 7622 HttpNetworkSessionPeer peer(session); |
7626 | 7623 |
7627 HostPortPair proxy_host("socks_proxy", 1080); | 7624 HostPortPair proxy_host("socks_proxy", 1080); |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8273 AuthCredentials(kFirst, kBar), callback4.callback()); | 8270 AuthCredentials(kFirst, kBar), callback4.callback()); |
8274 EXPECT_EQ(ERR_IO_PENDING, rv); | 8271 EXPECT_EQ(ERR_IO_PENDING, rv); |
8275 rv = callback4.WaitForResult(); | 8272 rv = callback4.WaitForResult(); |
8276 EXPECT_EQ(OK, rv); | 8273 EXPECT_EQ(OK, rv); |
8277 response = trans->GetResponseInfo(); | 8274 response = trans->GetResponseInfo(); |
8278 ASSERT_TRUE(response != NULL); | 8275 ASSERT_TRUE(response != NULL); |
8279 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 8276 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
8280 } | 8277 } |
8281 | 8278 |
8282 TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { | 8279 TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { |
8283 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8280 session_deps_.next_protos = SpdyNextProtos(); |
8284 HttpStreamFactory::set_use_alternate_protocols(true); | 8281 session_deps_.use_alternate_protocols = true; |
8285 | 8282 |
8286 std::string alternate_protocol_http_header = | 8283 std::string alternate_protocol_http_header = |
8287 GetAlternateProtocolHttpHeader(); | 8284 GetAlternateProtocolHttpHeader(); |
8288 | 8285 |
8289 MockRead data_reads[] = { | 8286 MockRead data_reads[] = { |
8290 MockRead("HTTP/1.1 200 OK\r\n"), | 8287 MockRead("HTTP/1.1 200 OK\r\n"), |
8291 MockRead(alternate_protocol_http_header.c_str()), | 8288 MockRead(alternate_protocol_http_header.c_str()), |
8292 MockRead("hello world"), | 8289 MockRead("hello world"), |
8293 MockRead(SYNCHRONOUS, OK), | 8290 MockRead(SYNCHRONOUS, OK), |
8294 }; | 8291 }; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8334 const PortAlternateProtocolPair alternate = | 8331 const PortAlternateProtocolPair alternate = |
8335 http_server_properties.GetAlternateProtocol(http_host_port_pair); | 8332 http_server_properties.GetAlternateProtocol(http_host_port_pair); |
8336 PortAlternateProtocolPair expected_alternate; | 8333 PortAlternateProtocolPair expected_alternate; |
8337 expected_alternate.port = 443; | 8334 expected_alternate.port = 443; |
8338 expected_alternate.protocol = AlternateProtocolFromNextProto(GetParam()); | 8335 expected_alternate.protocol = AlternateProtocolFromNextProto(GetParam()); |
8339 EXPECT_TRUE(expected_alternate.Equals(alternate)); | 8336 EXPECT_TRUE(expected_alternate.Equals(alternate)); |
8340 } | 8337 } |
8341 | 8338 |
8342 TEST_P(HttpNetworkTransactionTest, | 8339 TEST_P(HttpNetworkTransactionTest, |
8343 MarkBrokenAlternateProtocolAndFallback) { | 8340 MarkBrokenAlternateProtocolAndFallback) { |
8344 HttpStreamFactory::set_use_alternate_protocols(true); | 8341 session_deps_.use_alternate_protocols = true; |
8345 | 8342 |
8346 HttpRequestInfo request; | 8343 HttpRequestInfo request; |
8347 request.method = "GET"; | 8344 request.method = "GET"; |
8348 request.url = GURL("http://www.google.com/"); | 8345 request.url = GURL("http://www.google.com/"); |
8349 request.load_flags = 0; | 8346 request.load_flags = 0; |
8350 | 8347 |
8351 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8348 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
8352 StaticSocketDataProvider first_data; | 8349 StaticSocketDataProvider first_data; |
8353 first_data.set_connect_data(mock_connect); | 8350 first_data.set_connect_data(mock_connect); |
8354 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8351 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8397 HostPortPair::FromURL(request.url)); | 8394 HostPortPair::FromURL(request.url)); |
8398 EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); | 8395 EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); |
8399 } | 8396 } |
8400 | 8397 |
8401 TEST_P(HttpNetworkTransactionTest, | 8398 TEST_P(HttpNetworkTransactionTest, |
8402 AlternateProtocolPortRestrictedBlocked) { | 8399 AlternateProtocolPortRestrictedBlocked) { |
8403 // Ensure that we're not allowed to redirect traffic via an alternate | 8400 // Ensure that we're not allowed to redirect traffic via an alternate |
8404 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8401 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8405 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8402 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8406 // other cases. | 8403 // other cases. |
8407 HttpStreamFactory::set_use_alternate_protocols(true); | 8404 session_deps_.use_alternate_protocols = true; |
8408 | 8405 |
8409 HttpRequestInfo restricted_port_request; | 8406 HttpRequestInfo restricted_port_request; |
8410 restricted_port_request.method = "GET"; | 8407 restricted_port_request.method = "GET"; |
8411 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8408 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
8412 restricted_port_request.load_flags = 0; | 8409 restricted_port_request.load_flags = 0; |
8413 | 8410 |
8414 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8411 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
8415 StaticSocketDataProvider first_data; | 8412 StaticSocketDataProvider first_data; |
8416 first_data.set_connect_data(mock_connect); | 8413 first_data.set_connect_data(mock_connect); |
8417 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8414 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
(...skipping 29 matching lines...) Expand all Loading... |
8447 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 8444 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); |
8448 } | 8445 } |
8449 | 8446 |
8450 TEST_P(HttpNetworkTransactionTest, | 8447 TEST_P(HttpNetworkTransactionTest, |
8451 AlternateProtocolPortRestrictedPermitted) { | 8448 AlternateProtocolPortRestrictedPermitted) { |
8452 // Ensure that we're allowed to redirect traffic via an alternate | 8449 // Ensure that we're allowed to redirect traffic via an alternate |
8453 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8450 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8454 // on a restricted port (port < 1024) if we set | 8451 // on a restricted port (port < 1024) if we set |
8455 // enable_user_alternate_protocol_ports. | 8452 // enable_user_alternate_protocol_ports. |
8456 | 8453 |
8457 HttpStreamFactory::set_use_alternate_protocols(true); | 8454 session_deps_.use_alternate_protocols = true; |
8458 session_deps_.enable_user_alternate_protocol_ports = true; | 8455 session_deps_.enable_user_alternate_protocol_ports = true; |
8459 | 8456 |
8460 HttpRequestInfo restricted_port_request; | 8457 HttpRequestInfo restricted_port_request; |
8461 restricted_port_request.method = "GET"; | 8458 restricted_port_request.method = "GET"; |
8462 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8459 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
8463 restricted_port_request.load_flags = 0; | 8460 restricted_port_request.load_flags = 0; |
8464 | 8461 |
8465 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8462 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
8466 StaticSocketDataProvider first_data; | 8463 StaticSocketDataProvider first_data; |
8467 first_data.set_connect_data(mock_connect); | 8464 first_data.set_connect_data(mock_connect); |
(...skipping 28 matching lines...) Expand all Loading... |
8496 // Change to unrestricted port should succeed. | 8493 // Change to unrestricted port should succeed. |
8497 EXPECT_EQ(OK, callback.WaitForResult()); | 8494 EXPECT_EQ(OK, callback.WaitForResult()); |
8498 } | 8495 } |
8499 | 8496 |
8500 TEST_P(HttpNetworkTransactionTest, | 8497 TEST_P(HttpNetworkTransactionTest, |
8501 AlternateProtocolPortRestrictedAllowed) { | 8498 AlternateProtocolPortRestrictedAllowed) { |
8502 // Ensure that we're not allowed to redirect traffic via an alternate | 8499 // Ensure that we're not allowed to redirect traffic via an alternate |
8503 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8500 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8504 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8501 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8505 // other cases. | 8502 // other cases. |
8506 HttpStreamFactory::set_use_alternate_protocols(true); | 8503 session_deps_.use_alternate_protocols = true; |
8507 | 8504 |
8508 HttpRequestInfo restricted_port_request; | 8505 HttpRequestInfo restricted_port_request; |
8509 restricted_port_request.method = "GET"; | 8506 restricted_port_request.method = "GET"; |
8510 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8507 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
8511 restricted_port_request.load_flags = 0; | 8508 restricted_port_request.load_flags = 0; |
8512 | 8509 |
8513 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8510 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
8514 StaticSocketDataProvider first_data; | 8511 StaticSocketDataProvider first_data; |
8515 first_data.set_connect_data(mock_connect); | 8512 first_data.set_connect_data(mock_connect); |
8516 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8513 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
(...skipping 28 matching lines...) Expand all Loading... |
8545 // Valid change to restricted port should pass. | 8542 // Valid change to restricted port should pass. |
8546 EXPECT_EQ(OK, callback.WaitForResult()); | 8543 EXPECT_EQ(OK, callback.WaitForResult()); |
8547 } | 8544 } |
8548 | 8545 |
8549 TEST_P(HttpNetworkTransactionTest, | 8546 TEST_P(HttpNetworkTransactionTest, |
8550 AlternateProtocolPortUnrestrictedAllowed1) { | 8547 AlternateProtocolPortUnrestrictedAllowed1) { |
8551 // Ensure that we're not allowed to redirect traffic via an alternate | 8548 // Ensure that we're not allowed to redirect traffic via an alternate |
8552 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8549 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8553 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8550 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8554 // other cases. | 8551 // other cases. |
8555 HttpStreamFactory::set_use_alternate_protocols(true); | 8552 session_deps_.use_alternate_protocols = true; |
8556 | 8553 |
8557 HttpRequestInfo unrestricted_port_request; | 8554 HttpRequestInfo unrestricted_port_request; |
8558 unrestricted_port_request.method = "GET"; | 8555 unrestricted_port_request.method = "GET"; |
8559 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 8556 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
8560 unrestricted_port_request.load_flags = 0; | 8557 unrestricted_port_request.load_flags = 0; |
8561 | 8558 |
8562 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8559 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
8563 StaticSocketDataProvider first_data; | 8560 StaticSocketDataProvider first_data; |
8564 first_data.set_connect_data(mock_connect); | 8561 first_data.set_connect_data(mock_connect); |
8565 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8562 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
(...skipping 27 matching lines...) Expand all Loading... |
8593 // Valid change to restricted port should pass. | 8590 // Valid change to restricted port should pass. |
8594 EXPECT_EQ(OK, callback.WaitForResult()); | 8591 EXPECT_EQ(OK, callback.WaitForResult()); |
8595 } | 8592 } |
8596 | 8593 |
8597 TEST_P(HttpNetworkTransactionTest, | 8594 TEST_P(HttpNetworkTransactionTest, |
8598 AlternateProtocolPortUnrestrictedAllowed2) { | 8595 AlternateProtocolPortUnrestrictedAllowed2) { |
8599 // Ensure that we're not allowed to redirect traffic via an alternate | 8596 // Ensure that we're not allowed to redirect traffic via an alternate |
8600 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8597 // protocol to an unrestricted (port >= 1024) when the original traffic was |
8601 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8598 // on a restricted port (port < 1024). Ensure that we can redirect in all |
8602 // other cases. | 8599 // other cases. |
8603 HttpStreamFactory::set_use_alternate_protocols(true); | 8600 session_deps_.use_alternate_protocols = true; |
8604 | 8601 |
8605 HttpRequestInfo unrestricted_port_request; | 8602 HttpRequestInfo unrestricted_port_request; |
8606 unrestricted_port_request.method = "GET"; | 8603 unrestricted_port_request.method = "GET"; |
8607 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 8604 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
8608 unrestricted_port_request.load_flags = 0; | 8605 unrestricted_port_request.load_flags = 0; |
8609 | 8606 |
8610 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8607 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
8611 StaticSocketDataProvider first_data; | 8608 StaticSocketDataProvider first_data; |
8612 first_data.set_connect_data(mock_connect); | 8609 first_data.set_connect_data(mock_connect); |
8613 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8610 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
(...skipping 21 matching lines...) Expand all Loading... |
8635 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8632 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8636 TestCompletionCallback callback; | 8633 TestCompletionCallback callback; |
8637 | 8634 |
8638 int rv = trans->Start( | 8635 int rv = trans->Start( |
8639 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 8636 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
8640 EXPECT_EQ(ERR_IO_PENDING, rv); | 8637 EXPECT_EQ(ERR_IO_PENDING, rv); |
8641 // Valid change to an unrestricted port should pass. | 8638 // Valid change to an unrestricted port should pass. |
8642 EXPECT_EQ(OK, callback.WaitForResult()); | 8639 EXPECT_EQ(OK, callback.WaitForResult()); |
8643 } | 8640 } |
8644 | 8641 |
8645 TEST_P(HttpNetworkTransactionTest, | 8642 TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
8646 AlternateProtocolUnsafeBlocked) { | |
8647 // Ensure that we're not allowed to redirect traffic via an alternate | 8643 // Ensure that we're not allowed to redirect traffic via an alternate |
8648 // protocol to an unsafe port, and that we resume the second | 8644 // protocol to an unsafe port, and that we resume the second |
8649 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. | 8645 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. |
8650 HttpStreamFactory::set_use_alternate_protocols(true); | 8646 session_deps_.use_alternate_protocols = true; |
8651 | 8647 |
8652 HttpRequestInfo request; | 8648 HttpRequestInfo request; |
8653 request.method = "GET"; | 8649 request.method = "GET"; |
8654 request.url = GURL("http://www.google.com/"); | 8650 request.url = GURL("http://www.google.com/"); |
8655 request.load_flags = 0; | 8651 request.load_flags = 0; |
8656 | 8652 |
8657 // The alternate protocol request will error out before we attempt to connect, | 8653 // The alternate protocol request will error out before we attempt to connect, |
8658 // so only the standard HTTP request will try to connect. | 8654 // so only the standard HTTP request will try to connect. |
8659 MockRead data_reads[] = { | 8655 MockRead data_reads[] = { |
8660 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8656 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
(...skipping 17 matching lines...) Expand all Loading... |
8678 scoped_ptr<HttpTransaction> trans( | 8674 scoped_ptr<HttpTransaction> trans( |
8679 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8675 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
8680 TestCompletionCallback callback; | 8676 TestCompletionCallback callback; |
8681 | 8677 |
8682 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8678 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
8683 EXPECT_EQ(ERR_IO_PENDING, rv); | 8679 EXPECT_EQ(ERR_IO_PENDING, rv); |
8684 // The HTTP request should succeed. | 8680 // The HTTP request should succeed. |
8685 EXPECT_EQ(OK, callback.WaitForResult()); | 8681 EXPECT_EQ(OK, callback.WaitForResult()); |
8686 | 8682 |
8687 // Disable alternate protocol before the asserts. | 8683 // Disable alternate protocol before the asserts. |
8688 HttpStreamFactory::set_use_alternate_protocols(false); | 8684 // HttpStreamFactory::set_use_alternate_protocols(false); |
8689 | 8685 |
8690 const HttpResponseInfo* response = trans->GetResponseInfo(); | 8686 const HttpResponseInfo* response = trans->GetResponseInfo(); |
8691 ASSERT_TRUE(response != NULL); | 8687 ASSERT_TRUE(response != NULL); |
8692 ASSERT_TRUE(response->headers.get() != NULL); | 8688 ASSERT_TRUE(response->headers.get() != NULL); |
8693 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8689 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8694 | 8690 |
8695 std::string response_data; | 8691 std::string response_data; |
8696 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 8692 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
8697 EXPECT_EQ("hello world", response_data); | 8693 EXPECT_EQ("hello world", response_data); |
8698 } | 8694 } |
8699 | 8695 |
8700 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 8696 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
8701 HttpStreamFactory::set_use_alternate_protocols(true); | 8697 session_deps_.use_alternate_protocols = true; |
8702 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8698 session_deps_.next_protos = SpdyNextProtos(); |
8703 | 8699 |
8704 HttpRequestInfo request; | 8700 HttpRequestInfo request; |
8705 request.method = "GET"; | 8701 request.method = "GET"; |
8706 request.url = GURL("http://www.google.com/"); | 8702 request.url = GURL("http://www.google.com/"); |
8707 request.load_flags = 0; | 8703 request.load_flags = 0; |
8708 | 8704 |
8709 std::string alternate_protocol_http_header = | 8705 std::string alternate_protocol_http_header = |
8710 GetAlternateProtocolHttpHeader(); | 8706 GetAlternateProtocolHttpHeader(); |
8711 | 8707 |
8712 MockRead data_reads[] = { | 8708 MockRead data_reads[] = { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8781 ASSERT_TRUE(response->headers.get() != NULL); | 8777 ASSERT_TRUE(response->headers.get() != NULL); |
8782 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8778 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8783 EXPECT_TRUE(response->was_fetched_via_spdy); | 8779 EXPECT_TRUE(response->was_fetched_via_spdy); |
8784 EXPECT_TRUE(response->was_npn_negotiated); | 8780 EXPECT_TRUE(response->was_npn_negotiated); |
8785 | 8781 |
8786 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 8782 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
8787 EXPECT_EQ("hello!", response_data); | 8783 EXPECT_EQ("hello!", response_data); |
8788 } | 8784 } |
8789 | 8785 |
8790 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 8786 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
8791 HttpStreamFactory::set_use_alternate_protocols(true); | 8787 session_deps_.use_alternate_protocols = true; |
8792 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8788 session_deps_.next_protos = SpdyNextProtos(); |
8793 | 8789 |
8794 HttpRequestInfo request; | 8790 HttpRequestInfo request; |
8795 request.method = "GET"; | 8791 request.method = "GET"; |
8796 request.url = GURL("http://www.google.com/"); | 8792 request.url = GURL("http://www.google.com/"); |
8797 request.load_flags = 0; | 8793 request.load_flags = 0; |
8798 | 8794 |
8799 std::string alternate_protocol_http_header = | 8795 std::string alternate_protocol_http_header = |
8800 GetAlternateProtocolHttpHeader(); | 8796 GetAlternateProtocolHttpHeader(); |
8801 | 8797 |
8802 MockRead data_reads[] = { | 8798 MockRead data_reads[] = { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8898 ASSERT_TRUE(response != NULL); | 8894 ASSERT_TRUE(response != NULL); |
8899 ASSERT_TRUE(response->headers.get() != NULL); | 8895 ASSERT_TRUE(response->headers.get() != NULL); |
8900 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8896 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8901 EXPECT_TRUE(response->was_fetched_via_spdy); | 8897 EXPECT_TRUE(response->was_fetched_via_spdy); |
8902 EXPECT_TRUE(response->was_npn_negotiated); | 8898 EXPECT_TRUE(response->was_npn_negotiated); |
8903 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); | 8899 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); |
8904 EXPECT_EQ("hello!", response_data); | 8900 EXPECT_EQ("hello!", response_data); |
8905 } | 8901 } |
8906 | 8902 |
8907 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { | 8903 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { |
8908 HttpStreamFactory::set_use_alternate_protocols(true); | 8904 session_deps_.use_alternate_protocols = true; |
8909 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8905 session_deps_.next_protos = SpdyNextProtos(); |
8910 | 8906 |
8911 HttpRequestInfo request; | 8907 HttpRequestInfo request; |
8912 request.method = "GET"; | 8908 request.method = "GET"; |
8913 request.url = GURL("http://www.google.com/"); | 8909 request.url = GURL("http://www.google.com/"); |
8914 request.load_flags = 0; | 8910 request.load_flags = 0; |
8915 | 8911 |
8916 std::string alternate_protocol_http_header = | 8912 std::string alternate_protocol_http_header = |
8917 GetAlternateProtocolHttpHeader(); | 8913 GetAlternateProtocolHttpHeader(); |
8918 | 8914 |
8919 MockRead data_reads[] = { | 8915 MockRead data_reads[] = { |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9017 const std::vector<GURL>& resolved() const { return resolved_; } | 9013 const std::vector<GURL>& resolved() const { return resolved_; } |
9018 | 9014 |
9019 private: | 9015 private: |
9020 std::vector<GURL> resolved_; | 9016 std::vector<GURL> resolved_; |
9021 | 9017 |
9022 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); | 9018 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); |
9023 }; | 9019 }; |
9024 | 9020 |
9025 TEST_P(HttpNetworkTransactionTest, | 9021 TEST_P(HttpNetworkTransactionTest, |
9026 UseAlternateProtocolForTunneledNpnSpdy) { | 9022 UseAlternateProtocolForTunneledNpnSpdy) { |
9027 HttpStreamFactory::set_use_alternate_protocols(true); | 9023 session_deps_.use_alternate_protocols = true; |
9028 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9024 session_deps_.next_protos = SpdyNextProtos(); |
9029 | 9025 |
9030 ProxyConfig proxy_config; | 9026 ProxyConfig proxy_config; |
9031 proxy_config.set_auto_detect(true); | 9027 proxy_config.set_auto_detect(true); |
9032 proxy_config.set_pac_url(GURL("http://fooproxyurl")); | 9028 proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
9033 | 9029 |
9034 CapturingProxyResolver* capturing_proxy_resolver = | 9030 CapturingProxyResolver* capturing_proxy_resolver = |
9035 new CapturingProxyResolver(); | 9031 new CapturingProxyResolver(); |
9036 session_deps_.proxy_service.reset(new ProxyService( | 9032 session_deps_.proxy_service.reset(new ProxyService( |
9037 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, | 9033 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, |
9038 NULL)); | 9034 NULL)); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9139 capturing_proxy_resolver->resolved()[1].spec()); | 9135 capturing_proxy_resolver->resolved()[1].spec()); |
9140 | 9136 |
9141 LoadTimingInfo load_timing_info; | 9137 LoadTimingInfo load_timing_info; |
9142 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 9138 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
9143 TestLoadTimingNotReusedWithPac(load_timing_info, | 9139 TestLoadTimingNotReusedWithPac(load_timing_info, |
9144 CONNECT_TIMING_HAS_SSL_TIMES); | 9140 CONNECT_TIMING_HAS_SSL_TIMES); |
9145 } | 9141 } |
9146 | 9142 |
9147 TEST_P(HttpNetworkTransactionTest, | 9143 TEST_P(HttpNetworkTransactionTest, |
9148 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { | 9144 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { |
9149 HttpStreamFactory::set_use_alternate_protocols(true); | 9145 session_deps_.use_alternate_protocols = true; |
9150 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9146 session_deps_.next_protos = SpdyNextProtos(); |
9151 | 9147 |
9152 HttpRequestInfo request; | 9148 HttpRequestInfo request; |
9153 request.method = "GET"; | 9149 request.method = "GET"; |
9154 request.url = GURL("http://www.google.com/"); | 9150 request.url = GURL("http://www.google.com/"); |
9155 request.load_flags = 0; | 9151 request.load_flags = 0; |
9156 | 9152 |
9157 std::string alternate_protocol_http_header = | 9153 std::string alternate_protocol_http_header = |
9158 GetAlternateProtocolHttpHeader(); | 9154 GetAlternateProtocolHttpHeader(); |
9159 | 9155 |
9160 MockRead data_reads[] = { | 9156 MockRead data_reads[] = { |
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9830 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); | 9826 rv = trans_compete->Read(io_buf.get(), io_buf->size(), callback.callback()); |
9831 EXPECT_EQ(0, rv); | 9827 EXPECT_EQ(0, rv); |
9832 | 9828 |
9833 // Finally, the socket is released to the group. | 9829 // Finally, the socket is released to the group. |
9834 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); | 9830 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); |
9835 } | 9831 } |
9836 | 9832 |
9837 // This tests the case that a request is issued via http instead of spdy after | 9833 // This tests the case that a request is issued via http instead of spdy after |
9838 // npn is negotiated. | 9834 // npn is negotiated. |
9839 TEST_P(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { | 9835 TEST_P(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { |
9840 HttpStreamFactory::set_use_alternate_protocols(true); | 9836 session_deps_.use_alternate_protocols = true; |
9841 std::vector<NextProto> next_protos; | 9837 NextProtoVector next_protos; |
9842 next_protos.push_back(kProtoHTTP11); | 9838 next_protos.push_back(kProtoHTTP11); |
9843 HttpStreamFactory::SetNextProtos(next_protos); | 9839 session_deps_.next_protos = next_protos; |
| 9840 |
9844 HttpRequestInfo request; | 9841 HttpRequestInfo request; |
9845 request.method = "GET"; | 9842 request.method = "GET"; |
9846 request.url = GURL("https://www.google.com/"); | 9843 request.url = GURL("https://www.google.com/"); |
9847 request.load_flags = 0; | 9844 request.load_flags = 0; |
9848 | 9845 |
9849 MockWrite data_writes[] = { | 9846 MockWrite data_writes[] = { |
9850 MockWrite("GET / HTTP/1.1\r\n" | 9847 MockWrite("GET / HTTP/1.1\r\n" |
9851 "Host: www.google.com\r\n" | 9848 "Host: www.google.com\r\n" |
9852 "Connection: keep-alive\r\n\r\n"), | 9849 "Connection: keep-alive\r\n\r\n"), |
9853 }; | 9850 }; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9894 EXPECT_EQ("hello world", response_data); | 9891 EXPECT_EQ("hello world", response_data); |
9895 | 9892 |
9896 EXPECT_FALSE(response->was_fetched_via_spdy); | 9893 EXPECT_FALSE(response->was_fetched_via_spdy); |
9897 EXPECT_TRUE(response->was_npn_negotiated); | 9894 EXPECT_TRUE(response->was_npn_negotiated); |
9898 } | 9895 } |
9899 | 9896 |
9900 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { | 9897 TEST_P(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { |
9901 // Simulate the SSL handshake completing with an NPN negotiation | 9898 // Simulate the SSL handshake completing with an NPN negotiation |
9902 // followed by an immediate server closing of the socket. | 9899 // followed by an immediate server closing of the socket. |
9903 // Fix crash: http://crbug.com/46369 | 9900 // Fix crash: http://crbug.com/46369 |
9904 HttpStreamFactory::set_use_alternate_protocols(true); | 9901 session_deps_.use_alternate_protocols = true; |
9905 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9902 session_deps_.next_protos = SpdyNextProtos(); |
9906 | 9903 |
9907 HttpRequestInfo request; | 9904 HttpRequestInfo request; |
9908 request.method = "GET"; | 9905 request.method = "GET"; |
9909 request.url = GURL("https://www.google.com/"); | 9906 request.url = GURL("https://www.google.com/"); |
9910 request.load_flags = 0; | 9907 request.load_flags = 0; |
9911 | 9908 |
9912 SSLSocketDataProvider ssl(ASYNC, OK); | 9909 SSLSocketDataProvider ssl(ASYNC, OK); |
9913 ssl.SetNextProto(GetParam()); | 9910 ssl.SetNextProto(GetParam()); |
9914 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9911 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
9915 | 9912 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9957 credentials, request, callback, auth_token); | 9954 credentials, request, callback, auth_token); |
9958 } | 9955 } |
9959 | 9956 |
9960 private: | 9957 private: |
9961 GURL* url_; | 9958 GURL* url_; |
9962 }; | 9959 }; |
9963 | 9960 |
9964 TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { | 9961 TEST_P(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { |
9965 // This test ensures that the URL passed into the proxy is upgraded | 9962 // This test ensures that the URL passed into the proxy is upgraded |
9966 // to https when doing an Alternate Protocol upgrade. | 9963 // to https when doing an Alternate Protocol upgrade. |
9967 HttpStreamFactory::set_use_alternate_protocols(true); | 9964 session_deps_.use_alternate_protocols = true; |
9968 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9965 session_deps_.next_protos = SpdyNextProtos(); |
9969 | 9966 |
9970 session_deps_.proxy_service.reset( | 9967 session_deps_.proxy_service.reset( |
9971 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 9968 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
9972 CapturingNetLog net_log; | 9969 CapturingNetLog net_log; |
9973 session_deps_.net_log = &net_log; | 9970 session_deps_.net_log = &net_log; |
9974 GURL request_url; | 9971 GURL request_url; |
9975 { | 9972 { |
9976 HttpAuthHandlerMock::Factory* auth_factory = | 9973 HttpAuthHandlerMock::Factory* auth_factory = |
9977 new HttpAuthHandlerMock::Factory(); | 9974 new HttpAuthHandlerMock::Factory(); |
9978 UrlRecordingHttpAuthHandlerMock* auth_handler = | 9975 UrlRecordingHttpAuthHandlerMock* auth_handler = |
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10827 #define WRAPPED_TEST_P(test_case_name, test_name) \ | 10824 #define WRAPPED_TEST_P(test_case_name, test_name) \ |
10828 TEST_P(test_case_name, test_name) | 10825 TEST_P(test_case_name, test_name) |
10829 | 10826 |
10830 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 | 10827 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 |
10831 #if defined(OS_WIN) | 10828 #if defined(OS_WIN) |
10832 #define MAYBE_UseIPConnectionPooling DISABLED_UseIPConnectionPooling | 10829 #define MAYBE_UseIPConnectionPooling DISABLED_UseIPConnectionPooling |
10833 #else | 10830 #else |
10834 #define MAYBE_UseIPConnectionPooling UseIPConnectionPooling | 10831 #define MAYBE_UseIPConnectionPooling UseIPConnectionPooling |
10835 #endif | 10832 #endif |
10836 WRAPPED_TEST_P(HttpNetworkTransactionTest, MAYBE_UseIPConnectionPooling) { | 10833 WRAPPED_TEST_P(HttpNetworkTransactionTest, MAYBE_UseIPConnectionPooling) { |
10837 HttpStreamFactory::set_use_alternate_protocols(true); | 10834 session_deps_.use_alternate_protocols = true; |
10838 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 10835 session_deps_.next_protos = SpdyNextProtos(); |
10839 | 10836 |
10840 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 10837 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
10841 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 10838 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
10842 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10839 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10843 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 10840 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
10844 pool_peer.DisableDomainAuthenticationVerification(); | 10841 pool_peer.DisableDomainAuthenticationVerification(); |
10845 | 10842 |
10846 SSLSocketDataProvider ssl(ASYNC, OK); | 10843 SSLSocketDataProvider ssl(ASYNC, OK); |
10847 ssl.SetNextProto(GetParam()); | 10844 ssl.SetNextProto(GetParam()); |
10848 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10845 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10930 ASSERT_TRUE(response->headers.get() != NULL); | 10927 ASSERT_TRUE(response->headers.get() != NULL); |
10931 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 10928 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
10932 EXPECT_TRUE(response->was_fetched_via_spdy); | 10929 EXPECT_TRUE(response->was_fetched_via_spdy); |
10933 EXPECT_TRUE(response->was_npn_negotiated); | 10930 EXPECT_TRUE(response->was_npn_negotiated); |
10934 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 10931 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); |
10935 EXPECT_EQ("hello!", response_data); | 10932 EXPECT_EQ("hello!", response_data); |
10936 } | 10933 } |
10937 #undef MAYBE_UseIPConnectionPooling | 10934 #undef MAYBE_UseIPConnectionPooling |
10938 | 10935 |
10939 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { | 10936 TEST_P(HttpNetworkTransactionTest, UseIPConnectionPoolingAfterResolution) { |
10940 HttpStreamFactory::set_use_alternate_protocols(true); | 10937 session_deps_.use_alternate_protocols = true; |
10941 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 10938 session_deps_.next_protos = SpdyNextProtos(); |
10942 | 10939 |
10943 // Set up a special HttpNetworkSession with a MockCachingHostResolver. | 10940 // Set up a special HttpNetworkSession with a MockCachingHostResolver. |
10944 session_deps_.host_resolver.reset(new MockCachingHostResolver()); | 10941 session_deps_.host_resolver.reset(new MockCachingHostResolver()); |
10945 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10942 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
10946 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 10943 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
10947 pool_peer.DisableDomainAuthenticationVerification(); | 10944 pool_peer.DisableDomainAuthenticationVerification(); |
10948 | 10945 |
10949 SSLSocketDataProvider ssl(ASYNC, OK); | 10946 SSLSocketDataProvider ssl(ASYNC, OK); |
10950 ssl.SetNextProto(GetParam()); | 10947 ssl.SetNextProto(GetParam()); |
10951 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10948 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11073 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ | 11070 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ |
11074 UseIPConnectionPoolingWithHostCacheExpiration | 11071 UseIPConnectionPoolingWithHostCacheExpiration |
11075 #endif | 11072 #endif |
11076 WRAPPED_TEST_P(HttpNetworkTransactionTest, | 11073 WRAPPED_TEST_P(HttpNetworkTransactionTest, |
11077 MAYBE_UseIPConnectionPoolingWithHostCacheExpiration) { | 11074 MAYBE_UseIPConnectionPoolingWithHostCacheExpiration) { |
11078 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 . (MAYBE_ | 11075 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 . (MAYBE_ |
11079 // prefix doesn't work with parametrized tests). | 11076 // prefix doesn't work with parametrized tests). |
11080 #if defined(OS_WIN) | 11077 #if defined(OS_WIN) |
11081 return; | 11078 return; |
11082 #else | 11079 #else |
11083 HttpStreamFactory::set_use_alternate_protocols(true); | 11080 session_deps_.use_alternate_protocols = true; |
11084 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 11081 session_deps_.next_protos = SpdyNextProtos(); |
11085 | 11082 |
11086 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. | 11083 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. |
11087 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); | 11084 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); |
11088 HttpNetworkSession::Params params = | 11085 HttpNetworkSession::Params params = |
11089 SpdySessionDependencies::CreateSessionParams(&session_deps_); | 11086 SpdySessionDependencies::CreateSessionParams(&session_deps_); |
11090 params.host_resolver = &host_resolver; | 11087 params.host_resolver = &host_resolver; |
11091 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11088 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11092 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 11089 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
11093 pool_peer.DisableDomainAuthenticationVerification(); | 11090 pool_peer.DisableDomainAuthenticationVerification(); |
11094 | 11091 |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11421 LoadTimingInfo load_timing_info2; | 11418 LoadTimingInfo load_timing_info2; |
11422 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); | 11419 EXPECT_TRUE(trans2.GetLoadTimingInfo(&load_timing_info2)); |
11423 // The established SPDY sessions is considered reused by the HTTP request. | 11420 // The established SPDY sessions is considered reused by the HTTP request. |
11424 TestLoadTimingReusedWithPac(load_timing_info2); | 11421 TestLoadTimingReusedWithPac(load_timing_info2); |
11425 // HTTP requests over a SPDY session should have a different connection | 11422 // HTTP requests over a SPDY session should have a different connection |
11426 // socket_log_id than requests over a tunnel. | 11423 // socket_log_id than requests over a tunnel. |
11427 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); | 11424 EXPECT_NE(load_timing_info1.socket_log_id, load_timing_info2.socket_log_id); |
11428 } | 11425 } |
11429 | 11426 |
11430 TEST_P(HttpNetworkTransactionTest, UseSpdySessionForHttpWhenForced) { | 11427 TEST_P(HttpNetworkTransactionTest, UseSpdySessionForHttpWhenForced) { |
11431 HttpStreamFactory::set_force_spdy_always(true); | 11428 session_deps_.force_spdy_always = true; |
11432 const std::string https_url = "https://www.google.com/"; | 11429 const std::string https_url = "https://www.google.com/"; |
11433 const std::string http_url = "http://www.google.com:443/"; | 11430 const std::string http_url = "http://www.google.com:443/"; |
11434 | 11431 |
11435 // SPDY GET for HTTPS URL | 11432 // SPDY GET for HTTPS URL |
11436 scoped_ptr<SpdyFrame> req1( | 11433 scoped_ptr<SpdyFrame> req1( |
11437 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 11434 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
11438 // SPDY GET for the HTTP URL | 11435 // SPDY GET for the HTTP URL |
11439 scoped_ptr<SpdyFrame> req2( | 11436 scoped_ptr<SpdyFrame> req2( |
11440 spdy_util_.ConstructSpdyGet(http_url.c_str(), false, 3, MEDIUM)); | 11437 spdy_util_.ConstructSpdyGet(http_url.c_str(), false, 3, MEDIUM)); |
11441 | 11438 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11696 trans2.Start(&request2, callback2.callback(), BoundNetLog())); | 11693 trans2.Start(&request2, callback2.callback(), BoundNetLog())); |
11697 base::MessageLoop::current()->RunUntilIdle(); | 11694 base::MessageLoop::current()->RunUntilIdle(); |
11698 data2->RunFor(3); | 11695 data2->RunFor(3); |
11699 | 11696 |
11700 ASSERT_TRUE(callback2.have_result()); | 11697 ASSERT_TRUE(callback2.have_result()); |
11701 EXPECT_EQ(OK, callback2.WaitForResult()); | 11698 EXPECT_EQ(OK, callback2.WaitForResult()); |
11702 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 11699 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
11703 } | 11700 } |
11704 | 11701 |
11705 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { | 11702 TEST_P(HttpNetworkTransactionTest, CloseIdleSpdySessionToOpenNewOne) { |
11706 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 11703 session_deps_.next_protos = SpdyNextProtos(); |
11707 ClientSocketPoolManager::set_max_sockets_per_group( | 11704 ClientSocketPoolManager::set_max_sockets_per_group( |
11708 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 11705 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
11709 ClientSocketPoolManager::set_max_sockets_per_pool( | 11706 ClientSocketPoolManager::set_max_sockets_per_pool( |
11710 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 11707 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
11711 | 11708 |
11712 // Use two different hosts with different IPs so they don't get pooled. | 11709 // Use two different hosts with different IPs so they don't get pooled. |
11713 session_deps_.host_resolver->rules()->AddRule("www.a.com", "10.0.0.1"); | 11710 session_deps_.host_resolver->rules()->AddRule("www.a.com", "10.0.0.1"); |
11714 session_deps_.host_resolver->rules()->AddRule("www.b.com", "10.0.0.2"); | 11711 session_deps_.host_resolver->rules()->AddRule("www.b.com", "10.0.0.2"); |
11715 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11712 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
11716 | 11713 |
(...skipping 1419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13136 EXPECT_EQ(ERR_IO_PENDING, rv); | 13133 EXPECT_EQ(ERR_IO_PENDING, rv); |
13137 | 13134 |
13138 rv = callback.WaitForResult(); | 13135 rv = callback.WaitForResult(); |
13139 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13136 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
13140 | 13137 |
13141 const HttpResponseInfo* response = trans->GetResponseInfo(); | 13138 const HttpResponseInfo* response = trans->GetResponseInfo(); |
13142 EXPECT_TRUE(response == NULL); | 13139 EXPECT_TRUE(response == NULL); |
13143 } | 13140 } |
13144 | 13141 |
13145 } // namespace net | 13142 } // namespace net |
OLD | NEW |