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

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

Issue 14125003: Do not roll back to SSL 3.0 for Google properties. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 9475 matching lines...) Expand 10 before | Expand all | Expand 10 after
9486 if (rv == ERR_IO_PENDING) 9486 if (rv == ERR_IO_PENDING)
9487 rv = callback.WaitForResult(); 9487 rv = callback.WaitForResult();
9488 EXPECT_EQ(3, rv); 9488 EXPECT_EQ(3, rv);
9489 rv = trans_compete->Read(io_buf, io_buf->size(), callback.callback()); 9489 rv = trans_compete->Read(io_buf, io_buf->size(), callback.callback());
9490 EXPECT_EQ(0, rv); 9490 EXPECT_EQ(0, rv);
9491 9491
9492 // Finally, the socket is released to the group. 9492 // Finally, the socket is released to the group.
9493 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup)); 9493 EXPECT_EQ(1, transport_pool->IdleSocketCountInGroup(kSocketGroup));
9494 } 9494 }
9495 9495
9496 class TLSDecompressionFailureSocketDataProvider : public SocketDataProvider {
9497 public:
9498 explicit TLSDecompressionFailureSocketDataProvider(bool fail_all)
9499 : fail_all_(fail_all) {
9500 }
9501
9502 virtual MockRead GetNextRead() OVERRIDE {
9503 if (fail_all_)
9504 return MockRead(SYNCHRONOUS, ERR_SSL_DECOMPRESSION_FAILURE_ALERT);
9505
9506 return MockRead(SYNCHRONOUS,
9507 "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nok.\r\n");
9508 }
9509
9510 virtual MockWriteResult OnWrite(const std::string& data) OVERRIDE {
9511 return MockWriteResult(SYNCHRONOUS /* async */, data.size());
9512 }
9513
9514 virtual void Reset() OVERRIDE {
9515 }
9516
9517 private:
9518 const bool fail_all_;
9519 };
9520
9521 // Test that we restart a connection when we see a decompression failure from
9522 // the peer during the handshake. (In the real world we'll restart with SSLv3
9523 // and we won't offer DEFLATE in that case.)
9524 TEST_F(HttpNetworkTransactionSpdy2Test, RestartAfterTLSDecompressionFailure) {
9525 HttpRequestInfo request;
9526 request.method = "GET";
9527 request.url = GURL("https://tlsdecompressionfailure.example.com/");
9528 request.load_flags = 0;
9529
9530 SpdySessionDependencies session_deps;
9531 TLSDecompressionFailureSocketDataProvider socket_data_provider1(
9532 false /* fail all reads */);
9533 TLSDecompressionFailureSocketDataProvider socket_data_provider2(false);
9534 SSLSocketDataProvider ssl_socket_data_provider1(
9535 SYNCHRONOUS, ERR_SSL_DECOMPRESSION_FAILURE_ALERT);
9536 SSLSocketDataProvider ssl_socket_data_provider2(SYNCHRONOUS, OK);
9537 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider1);
9538 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider2);
9539 session_deps.socket_factory->AddSSLSocketDataProvider(
9540 &ssl_socket_data_provider1);
9541 session_deps.socket_factory->AddSSLSocketDataProvider(
9542 &ssl_socket_data_provider2);
9543
9544 // Work around http://crbug.com/37454
9545 StaticSocketDataProvider bug37454_connection;
9546 bug37454_connection.set_connect_data(MockConnect(ASYNC, ERR_UNEXPECTED));
9547 session_deps.socket_factory->AddSocketDataProvider(&bug37454_connection);
9548
9549 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
9550 scoped_ptr<HttpTransaction> trans(
9551 new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
9552 TestCompletionCallback callback;
9553
9554 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9555 EXPECT_EQ(ERR_IO_PENDING, rv);
9556 EXPECT_EQ(OK, callback.WaitForResult());
9557
9558 const HttpResponseInfo* response = trans->GetResponseInfo();
9559 ASSERT_TRUE(response != NULL);
9560 ASSERT_TRUE(response->headers != NULL);
9561 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9562
9563 std::string response_data;
9564 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9565 EXPECT_EQ("ok.", response_data);
9566 }
9567
9568 // Test that we restart a connection if we get a decompression failure from the
9569 // peer while reading the first bytes from the connection. This occurs when the
9570 // peer cannot handle DEFLATE but we're using False Start, so we don't notice
9571 // in the handshake.
9572 TEST_F(HttpNetworkTransactionSpdy2Test,
9573 RestartAfterTLSDecompressionFailureWithFalseStart) {
9574 HttpRequestInfo request;
9575 request.method = "GET";
9576 request.url = GURL("https://tlsdecompressionfailure2.example.com/");
9577 request.load_flags = 0;
9578
9579 SpdySessionDependencies session_deps;
9580 TLSDecompressionFailureSocketDataProvider socket_data_provider1(
9581 true /* fail all reads */);
9582 TLSDecompressionFailureSocketDataProvider socket_data_provider2(false);
9583 SSLSocketDataProvider ssl_socket_data_provider1(SYNCHRONOUS, OK);
9584 SSLSocketDataProvider ssl_socket_data_provider2(SYNCHRONOUS, OK);
9585 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider1);
9586 session_deps.socket_factory->AddSocketDataProvider(&socket_data_provider2);
9587 session_deps.socket_factory->AddSSLSocketDataProvider(
9588 &ssl_socket_data_provider1);
9589 session_deps.socket_factory->AddSSLSocketDataProvider(
9590 &ssl_socket_data_provider2);
9591
9592 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
9593 scoped_ptr<HttpTransaction> trans(
9594 new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
9595 TestCompletionCallback callback;
9596
9597 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
9598 EXPECT_EQ(ERR_IO_PENDING, rv);
9599 EXPECT_EQ(OK, callback.WaitForResult());
9600
9601 const HttpResponseInfo* response = trans->GetResponseInfo();
9602 ASSERT_TRUE(response != NULL);
9603 ASSERT_TRUE(response->headers != NULL);
9604 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9605
9606 std::string response_data;
9607 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9608 EXPECT_EQ("ok.", response_data);
9609 }
9610
9611 // This tests the case that a request is issued via http instead of spdy after 9496 // This tests the case that a request is issued via http instead of spdy after
9612 // npn is negotiated. 9497 // npn is negotiated.
9613 TEST_F(HttpNetworkTransactionSpdy2Test, NpnWithHttpOverSSL) { 9498 TEST_F(HttpNetworkTransactionSpdy2Test, NpnWithHttpOverSSL) {
9614 HttpStreamFactory::set_use_alternate_protocols(true); 9499 HttpStreamFactory::set_use_alternate_protocols(true);
9615 HttpStreamFactory::SetNextProtos( 9500 HttpStreamFactory::SetNextProtos(
9616 MakeNextProtos("http/1.1", "http1.1", NULL)); 9501 MakeNextProtos("http/1.1", "http1.1", NULL));
9617 SpdySessionDependencies session_deps; 9502 SpdySessionDependencies session_deps;
9618 HttpRequestInfo request; 9503 HttpRequestInfo request;
9619 request.method = "GET"; 9504 request.method = "GET";
9620 request.url = GURL("https://www.google.com/"); 9505 request.url = GURL("https://www.google.com/");
(...skipping 1747 matching lines...) Expand 10 before | Expand all | Expand 10 after
11368 trans2.Start(&request2, callback2.callback(), BoundNetLog())); 11253 trans2.Start(&request2, callback2.callback(), BoundNetLog()));
11369 MessageLoop::current()->RunUntilIdle(); 11254 MessageLoop::current()->RunUntilIdle();
11370 data2->RunFor(3); 11255 data2->RunFor(3);
11371 11256
11372 ASSERT_TRUE(callback2.have_result()); 11257 ASSERT_TRUE(callback2.have_result());
11373 EXPECT_EQ(OK, callback2.WaitForResult()); 11258 EXPECT_EQ(OK, callback2.WaitForResult());
11374 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); 11259 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy);
11375 } 11260 }
11376 11261
11377 } // namespace net 11262 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_network_transaction_spdy3_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698