| 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 |