| OLD | NEW |
| 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/socket/ssl_client_socket.h" | 5 #include "net/socket/ssl_client_socket.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 8 #include "base/location.h" | 10 #include "base/location.h" |
| 9 #include "base/macros.h" | 11 #include "base/macros.h" |
| 10 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 11 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 12 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
| 13 #include "base/thread_task_runner_handle.h" | 15 #include "base/thread_task_runner_handle.h" |
| 14 #include "base/time/time.h" | 16 #include "base/time/time.h" |
| 15 #include "net/base/address_list.h" | 17 #include "net/base/address_list.h" |
| 16 #include "net/base/io_buffer.h" | 18 #include "net/base/io_buffer.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 | 56 |
| 55 // WrappedStreamSocket is a base class that wraps an existing StreamSocket, | 57 // WrappedStreamSocket is a base class that wraps an existing StreamSocket, |
| 56 // forwarding the Socket and StreamSocket interfaces to the underlying | 58 // forwarding the Socket and StreamSocket interfaces to the underlying |
| 57 // transport. | 59 // transport. |
| 58 // This is to provide a common base class for subclasses to override specific | 60 // This is to provide a common base class for subclasses to override specific |
| 59 // StreamSocket methods for testing, while still communicating with a 'real' | 61 // StreamSocket methods for testing, while still communicating with a 'real' |
| 60 // StreamSocket. | 62 // StreamSocket. |
| 61 class WrappedStreamSocket : public StreamSocket { | 63 class WrappedStreamSocket : public StreamSocket { |
| 62 public: | 64 public: |
| 63 explicit WrappedStreamSocket(scoped_ptr<StreamSocket> transport) | 65 explicit WrappedStreamSocket(scoped_ptr<StreamSocket> transport) |
| 64 : transport_(transport.Pass()) {} | 66 : transport_(std::move(transport)) {} |
| 65 ~WrappedStreamSocket() override {} | 67 ~WrappedStreamSocket() override {} |
| 66 | 68 |
| 67 // StreamSocket implementation: | 69 // StreamSocket implementation: |
| 68 int Connect(const CompletionCallback& callback) override { | 70 int Connect(const CompletionCallback& callback) override { |
| 69 return transport_->Connect(callback); | 71 return transport_->Connect(callback); |
| 70 } | 72 } |
| 71 void Disconnect() override { transport_->Disconnect(); } | 73 void Disconnect() override { transport_->Disconnect(); } |
| 72 bool IsConnected() const override { return transport_->IsConnected(); } | 74 bool IsConnected() const override { return transport_->IsConnected(); } |
| 73 bool IsConnectedAndIdle() const override { | 75 bool IsConnectedAndIdle() const override { |
| 74 return transport_->IsConnectedAndIdle(); | 76 return transport_->IsConnectedAndIdle(); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 State state_; | 174 State state_; |
| 173 scoped_refptr<GrowableIOBuffer> read_buffer_; | 175 scoped_refptr<GrowableIOBuffer> read_buffer_; |
| 174 int buffer_size_; | 176 int buffer_size_; |
| 175 | 177 |
| 176 scoped_refptr<IOBuffer> user_read_buf_; | 178 scoped_refptr<IOBuffer> user_read_buf_; |
| 177 CompletionCallback user_read_callback_; | 179 CompletionCallback user_read_callback_; |
| 178 }; | 180 }; |
| 179 | 181 |
| 180 ReadBufferingStreamSocket::ReadBufferingStreamSocket( | 182 ReadBufferingStreamSocket::ReadBufferingStreamSocket( |
| 181 scoped_ptr<StreamSocket> transport) | 183 scoped_ptr<StreamSocket> transport) |
| 182 : WrappedStreamSocket(transport.Pass()), | 184 : WrappedStreamSocket(std::move(transport)), |
| 183 read_buffer_(new GrowableIOBuffer()), | 185 read_buffer_(new GrowableIOBuffer()), |
| 184 buffer_size_(0) {} | 186 buffer_size_(0) {} |
| 185 | 187 |
| 186 void ReadBufferingStreamSocket::SetBufferSize(int size) { | 188 void ReadBufferingStreamSocket::SetBufferSize(int size) { |
| 187 DCHECK(!user_read_buf_.get()); | 189 DCHECK(!user_read_buf_.get()); |
| 188 buffer_size_ = size; | 190 buffer_size_ = size; |
| 189 read_buffer_->SetCapacity(size); | 191 read_buffer_->SetCapacity(size); |
| 190 } | 192 } |
| 191 | 193 |
| 192 int ReadBufferingStreamSocket::Read(IOBuffer* buf, | 194 int ReadBufferingStreamSocket::Read(IOBuffer* buf, |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 int pending_read_error_; | 308 int pending_read_error_; |
| 307 | 309 |
| 308 bool have_write_error_; | 310 bool have_write_error_; |
| 309 int pending_write_error_; | 311 int pending_write_error_; |
| 310 | 312 |
| 311 DISALLOW_COPY_AND_ASSIGN(SynchronousErrorStreamSocket); | 313 DISALLOW_COPY_AND_ASSIGN(SynchronousErrorStreamSocket); |
| 312 }; | 314 }; |
| 313 | 315 |
| 314 SynchronousErrorStreamSocket::SynchronousErrorStreamSocket( | 316 SynchronousErrorStreamSocket::SynchronousErrorStreamSocket( |
| 315 scoped_ptr<StreamSocket> transport) | 317 scoped_ptr<StreamSocket> transport) |
| 316 : WrappedStreamSocket(transport.Pass()), | 318 : WrappedStreamSocket(std::move(transport)), |
| 317 have_read_error_(false), | 319 have_read_error_(false), |
| 318 pending_read_error_(OK), | 320 pending_read_error_(OK), |
| 319 have_write_error_(false), | 321 have_write_error_(false), |
| 320 pending_write_error_(OK) {} | 322 pending_write_error_(OK) {} |
| 321 | 323 |
| 322 int SynchronousErrorStreamSocket::Read(IOBuffer* buf, | 324 int SynchronousErrorStreamSocket::Read(IOBuffer* buf, |
| 323 int buf_len, | 325 int buf_len, |
| 324 const CompletionCallback& callback) { | 326 const CompletionCallback& callback) { |
| 325 if (have_read_error_) | 327 if (have_read_error_) |
| 326 return pending_read_error_; | 328 return pending_read_error_; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 | 410 |
| 409 // The length for the pending write, or -1 if not scheduled. | 411 // The length for the pending write, or -1 if not scheduled. |
| 410 int pending_write_len_; | 412 int pending_write_len_; |
| 411 | 413 |
| 412 // WaitForWrite() wait loop. | 414 // WaitForWrite() wait loop. |
| 413 scoped_ptr<base::RunLoop> write_loop_; | 415 scoped_ptr<base::RunLoop> write_loop_; |
| 414 }; | 416 }; |
| 415 | 417 |
| 416 FakeBlockingStreamSocket::FakeBlockingStreamSocket( | 418 FakeBlockingStreamSocket::FakeBlockingStreamSocket( |
| 417 scoped_ptr<StreamSocket> transport) | 419 scoped_ptr<StreamSocket> transport) |
| 418 : WrappedStreamSocket(transport.Pass()), | 420 : WrappedStreamSocket(std::move(transport)), |
| 419 should_block_read_(false), | 421 should_block_read_(false), |
| 420 pending_read_result_(ERR_IO_PENDING), | 422 pending_read_result_(ERR_IO_PENDING), |
| 421 should_block_write_(false), | 423 should_block_write_(false), |
| 422 pending_write_len_(-1) {} | 424 pending_write_len_(-1) {} |
| 423 | 425 |
| 424 int FakeBlockingStreamSocket::Read(IOBuffer* buf, | 426 int FakeBlockingStreamSocket::Read(IOBuffer* buf, |
| 425 int len, | 427 int len, |
| 426 const CompletionCallback& callback) { | 428 const CompletionCallback& callback) { |
| 427 DCHECK(!pending_read_buf_); | 429 DCHECK(!pending_read_buf_); |
| 428 DCHECK(pending_read_callback_.is_null()); | 430 DCHECK(pending_read_callback_.is_null()); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 pending_read_buf_ = nullptr; | 558 pending_read_buf_ = nullptr; |
| 557 base::ResetAndReturn(&pending_read_callback_).Run(result); | 559 base::ResetAndReturn(&pending_read_callback_).Run(result); |
| 558 } | 560 } |
| 559 } | 561 } |
| 560 | 562 |
| 561 // CountingStreamSocket wraps an existing StreamSocket and maintains a count of | 563 // CountingStreamSocket wraps an existing StreamSocket and maintains a count of |
| 562 // reads and writes on the socket. | 564 // reads and writes on the socket. |
| 563 class CountingStreamSocket : public WrappedStreamSocket { | 565 class CountingStreamSocket : public WrappedStreamSocket { |
| 564 public: | 566 public: |
| 565 explicit CountingStreamSocket(scoped_ptr<StreamSocket> transport) | 567 explicit CountingStreamSocket(scoped_ptr<StreamSocket> transport) |
| 566 : WrappedStreamSocket(transport.Pass()), | 568 : WrappedStreamSocket(std::move(transport)), |
| 567 read_count_(0), | 569 read_count_(0), |
| 568 write_count_(0) {} | 570 write_count_(0) {} |
| 569 ~CountingStreamSocket() override {} | 571 ~CountingStreamSocket() override {} |
| 570 | 572 |
| 571 // Socket implementation: | 573 // Socket implementation: |
| 572 int Read(IOBuffer* buf, | 574 int Read(IOBuffer* buf, |
| 573 int buf_len, | 575 int buf_len, |
| 574 const CompletionCallback& callback) override { | 576 const CompletionCallback& callback) override { |
| 575 read_count_++; | 577 read_count_++; |
| 576 return transport_->Read(buf, buf_len, callback); | 578 return transport_->Read(buf, buf_len, callback); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 return false; | 731 return false; |
| 730 } | 732 } |
| 731 return true; | 733 return true; |
| 732 } | 734 } |
| 733 | 735 |
| 734 scoped_ptr<SSLClientSocket> CreateSSLClientSocket( | 736 scoped_ptr<SSLClientSocket> CreateSSLClientSocket( |
| 735 scoped_ptr<StreamSocket> transport_socket, | 737 scoped_ptr<StreamSocket> transport_socket, |
| 736 const HostPortPair& host_and_port, | 738 const HostPortPair& host_and_port, |
| 737 const SSLConfig& ssl_config) { | 739 const SSLConfig& ssl_config) { |
| 738 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); | 740 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); |
| 739 connection->SetSocket(transport_socket.Pass()); | 741 connection->SetSocket(std::move(transport_socket)); |
| 740 return socket_factory_->CreateSSLClientSocket( | 742 return socket_factory_->CreateSSLClientSocket( |
| 741 connection.Pass(), host_and_port, ssl_config, context_); | 743 std::move(connection), host_and_port, ssl_config, context_); |
| 742 } | 744 } |
| 743 | 745 |
| 744 // Create an SSLClientSocket object and use it to connect to a test | 746 // Create an SSLClientSocket object and use it to connect to a test |
| 745 // server, then wait for connection results. This must be called after | 747 // server, then wait for connection results. This must be called after |
| 746 // a successful StartTestServer() call. | 748 // a successful StartTestServer() call. |
| 747 // |ssl_config| the SSL configuration to use. | 749 // |ssl_config| the SSL configuration to use. |
| 748 // |result| will retrieve the ::Connect() result value. | 750 // |result| will retrieve the ::Connect() result value. |
| 749 // Returns true on success, false otherwise. Success means that the SSL socket | 751 // Returns true on success, false otherwise. Success means that the SSL socket |
| 750 // could be created and its Connect() was called, not that the connection | 752 // could be created and its Connect() was called, not that the connection |
| 751 // itself was a success. | 753 // itself was a success. |
| 752 bool CreateAndConnectSSLClientSocket(const SSLConfig& ssl_config, | 754 bool CreateAndConnectSSLClientSocket(const SSLConfig& ssl_config, |
| 753 int* result) { | 755 int* result) { |
| 754 scoped_ptr<StreamSocket> transport( | 756 scoped_ptr<StreamSocket> transport( |
| 755 new TCPClientSocket(addr_, &log_, NetLog::Source())); | 757 new TCPClientSocket(addr_, &log_, NetLog::Source())); |
| 756 int rv = callback_.GetResult(transport->Connect(callback_.callback())); | 758 int rv = callback_.GetResult(transport->Connect(callback_.callback())); |
| 757 if (rv != OK) { | 759 if (rv != OK) { |
| 758 LOG(ERROR) << "Could not connect to SpawnedTestServer"; | 760 LOG(ERROR) << "Could not connect to SpawnedTestServer"; |
| 759 return false; | 761 return false; |
| 760 } | 762 } |
| 761 | 763 |
| 762 sock_ = CreateSSLClientSocket( | 764 sock_ = CreateSSLClientSocket(std::move(transport), |
| 763 transport.Pass(), spawned_test_server_->host_port_pair(), ssl_config); | 765 spawned_test_server_->host_port_pair(), |
| 766 ssl_config); |
| 764 EXPECT_FALSE(sock_->IsConnected()); | 767 EXPECT_FALSE(sock_->IsConnected()); |
| 765 | 768 |
| 766 *result = callback_.GetResult(sock_->Connect(callback_.callback())); | 769 *result = callback_.GetResult(sock_->Connect(callback_.callback())); |
| 767 return true; | 770 return true; |
| 768 } | 771 } |
| 769 | 772 |
| 770 // Adds the server certificate with provided cert status. | 773 // Adds the server certificate with provided cert status. |
| 771 // Must be called after StartTestServer has been called. | 774 // Must be called after StartTestServer has been called. |
| 772 void AddServerCertStatusToSSLConfig(CertStatus status, | 775 void AddServerCertStatusToSSLConfig(CertStatus status, |
| 773 SSLConfig* ssl_config) { | 776 SSLConfig* ssl_config) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 return NULL; | 815 return NULL; |
| 813 | 816 |
| 814 TestCompletionCallback callback; | 817 TestCompletionCallback callback; |
| 815 TestNetLog log; | 818 TestNetLog log; |
| 816 scoped_ptr<StreamSocket> transport( | 819 scoped_ptr<StreamSocket> transport( |
| 817 new TCPClientSocket(addr, &log, NetLog::Source())); | 820 new TCPClientSocket(addr, &log, NetLog::Source())); |
| 818 int rv = callback.GetResult(transport->Connect(callback.callback())); | 821 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 819 EXPECT_EQ(OK, rv); | 822 EXPECT_EQ(OK, rv); |
| 820 | 823 |
| 821 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 824 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 822 transport.Pass(), spawned_test_server.host_port_pair(), SSLConfig())); | 825 std::move(transport), spawned_test_server.host_port_pair(), |
| 826 SSLConfig())); |
| 823 EXPECT_FALSE(sock->IsConnected()); | 827 EXPECT_FALSE(sock->IsConnected()); |
| 824 | 828 |
| 825 rv = callback.GetResult(sock->Connect(callback.callback())); | 829 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 826 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 830 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); |
| 827 | 831 |
| 828 scoped_refptr<SSLCertRequestInfo> request_info = new SSLCertRequestInfo(); | 832 scoped_refptr<SSLCertRequestInfo> request_info = new SSLCertRequestInfo(); |
| 829 sock->GetSSLCertRequestInfo(request_info.get()); | 833 sock->GetSSLCertRequestInfo(request_info.get()); |
| 830 sock->Disconnect(); | 834 sock->Disconnect(); |
| 831 EXPECT_FALSE(sock->IsConnected()); | 835 EXPECT_FALSE(sock->IsConnected()); |
| 832 EXPECT_TRUE(spawned_test_server.host_port_pair().Equals( | 836 EXPECT_TRUE(spawned_test_server.host_port_pair().Equals( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 854 void CreateAndConnectUntilServerFinishedReceived( | 858 void CreateAndConnectUntilServerFinishedReceived( |
| 855 const SSLConfig& client_config, | 859 const SSLConfig& client_config, |
| 856 TestCompletionCallback* callback, | 860 TestCompletionCallback* callback, |
| 857 FakeBlockingStreamSocket** out_raw_transport, | 861 FakeBlockingStreamSocket** out_raw_transport, |
| 858 scoped_ptr<SSLClientSocket>* out_sock) { | 862 scoped_ptr<SSLClientSocket>* out_sock) { |
| 859 CHECK(spawned_test_server()); | 863 CHECK(spawned_test_server()); |
| 860 | 864 |
| 861 scoped_ptr<StreamSocket> real_transport( | 865 scoped_ptr<StreamSocket> real_transport( |
| 862 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 866 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 863 scoped_ptr<FakeBlockingStreamSocket> transport( | 867 scoped_ptr<FakeBlockingStreamSocket> transport( |
| 864 new FakeBlockingStreamSocket(real_transport.Pass())); | 868 new FakeBlockingStreamSocket(std::move(real_transport))); |
| 865 int rv = callback->GetResult(transport->Connect(callback->callback())); | 869 int rv = callback->GetResult(transport->Connect(callback->callback())); |
| 866 EXPECT_EQ(OK, rv); | 870 EXPECT_EQ(OK, rv); |
| 867 | 871 |
| 868 FakeBlockingStreamSocket* raw_transport = transport.get(); | 872 FakeBlockingStreamSocket* raw_transport = transport.get(); |
| 869 scoped_ptr<SSLClientSocket> sock = CreateSSLClientSocket( | 873 scoped_ptr<SSLClientSocket> sock = CreateSSLClientSocket( |
| 870 transport.Pass(), spawned_test_server()->host_port_pair(), | 874 std::move(transport), spawned_test_server()->host_port_pair(), |
| 871 client_config); | 875 client_config); |
| 872 | 876 |
| 873 // Connect. Stop before the client processes the first server leg | 877 // Connect. Stop before the client processes the first server leg |
| 874 // (ServerHello, etc.) | 878 // (ServerHello, etc.) |
| 875 raw_transport->BlockReadResult(); | 879 raw_transport->BlockReadResult(); |
| 876 rv = sock->Connect(callback->callback()); | 880 rv = sock->Connect(callback->callback()); |
| 877 EXPECT_EQ(ERR_IO_PENDING, rv); | 881 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 878 raw_transport->WaitForReadResult(); | 882 raw_transport->WaitForReadResult(); |
| 879 | 883 |
| 880 // Release the ServerHello and wait for the client to write | 884 // Release the ServerHello and wait for the client to write |
| 881 // ClientKeyExchange, etc. (A proxy for waiting for the entirety of the | 885 // ClientKeyExchange, etc. (A proxy for waiting for the entirety of the |
| 882 // server's leg to complete, since it may span multiple reads.) | 886 // server's leg to complete, since it may span multiple reads.) |
| 883 EXPECT_FALSE(callback->have_result()); | 887 EXPECT_FALSE(callback->have_result()); |
| 884 raw_transport->BlockWrite(); | 888 raw_transport->BlockWrite(); |
| 885 raw_transport->UnblockReadResult(); | 889 raw_transport->UnblockReadResult(); |
| 886 raw_transport->WaitForWrite(); | 890 raw_transport->WaitForWrite(); |
| 887 | 891 |
| 888 // And, finally, release that and block the next server leg | 892 // And, finally, release that and block the next server leg |
| 889 // (ChangeCipherSpec, Finished). | 893 // (ChangeCipherSpec, Finished). |
| 890 raw_transport->BlockReadResult(); | 894 raw_transport->BlockReadResult(); |
| 891 raw_transport->UnblockWrite(); | 895 raw_transport->UnblockWrite(); |
| 892 | 896 |
| 893 *out_raw_transport = raw_transport; | 897 *out_raw_transport = raw_transport; |
| 894 *out_sock = sock.Pass(); | 898 *out_sock = std::move(sock); |
| 895 } | 899 } |
| 896 | 900 |
| 897 void TestFalseStart(const SpawnedTestServer::SSLOptions& server_options, | 901 void TestFalseStart(const SpawnedTestServer::SSLOptions& server_options, |
| 898 const SSLConfig& client_config, | 902 const SSLConfig& client_config, |
| 899 bool expect_false_start) { | 903 bool expect_false_start) { |
| 900 ASSERT_TRUE(StartTestServer(server_options)); | 904 ASSERT_TRUE(StartTestServer(server_options)); |
| 901 | 905 |
| 902 TestCompletionCallback callback; | 906 TestCompletionCallback callback; |
| 903 FakeBlockingStreamSocket* raw_transport = NULL; | 907 FakeBlockingStreamSocket* raw_transport = NULL; |
| 904 scoped_ptr<SSLClientSocket> sock; | 908 scoped_ptr<SSLClientSocket> sock; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 980 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 977 | 981 |
| 978 TestCompletionCallback callback; | 982 TestCompletionCallback callback; |
| 979 TestNetLog log; | 983 TestNetLog log; |
| 980 scoped_ptr<StreamSocket> transport( | 984 scoped_ptr<StreamSocket> transport( |
| 981 new TCPClientSocket(addr(), &log, NetLog::Source())); | 985 new TCPClientSocket(addr(), &log, NetLog::Source())); |
| 982 int rv = callback.GetResult(transport->Connect(callback.callback())); | 986 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 983 EXPECT_EQ(OK, rv); | 987 EXPECT_EQ(OK, rv); |
| 984 | 988 |
| 985 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 989 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 986 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 990 std::move(transport), spawned_test_server()->host_port_pair(), |
| 991 SSLConfig())); |
| 987 | 992 |
| 988 EXPECT_FALSE(sock->IsConnected()); | 993 EXPECT_FALSE(sock->IsConnected()); |
| 989 | 994 |
| 990 rv = sock->Connect(callback.callback()); | 995 rv = sock->Connect(callback.callback()); |
| 991 | 996 |
| 992 TestNetLogEntry::List entries; | 997 TestNetLogEntry::List entries; |
| 993 log.GetEntries(&entries); | 998 log.GetEntries(&entries); |
| 994 EXPECT_TRUE(LogContainsBeginEvent(entries, 5, NetLog::TYPE_SSL_CONNECT)); | 999 EXPECT_TRUE(LogContainsBeginEvent(entries, 5, NetLog::TYPE_SSL_CONNECT)); |
| 995 if (rv == ERR_IO_PENDING) | 1000 if (rv == ERR_IO_PENDING) |
| 996 rv = callback.WaitForResult(); | 1001 rv = callback.WaitForResult(); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1123 | 1128 |
| 1124 TestCompletionCallback callback; | 1129 TestCompletionCallback callback; |
| 1125 scoped_ptr<StreamSocket> transport( | 1130 scoped_ptr<StreamSocket> transport( |
| 1126 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1131 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1127 EXPECT_EQ(0, transport->GetTotalReceivedBytes()); | 1132 EXPECT_EQ(0, transport->GetTotalReceivedBytes()); |
| 1128 | 1133 |
| 1129 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1134 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1130 EXPECT_EQ(OK, rv); | 1135 EXPECT_EQ(OK, rv); |
| 1131 | 1136 |
| 1132 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1137 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1133 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 1138 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1139 SSLConfig())); |
| 1134 EXPECT_EQ(0, sock->GetTotalReceivedBytes()); | 1140 EXPECT_EQ(0, sock->GetTotalReceivedBytes()); |
| 1135 | 1141 |
| 1136 rv = callback.GetResult(sock->Connect(callback.callback())); | 1142 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1137 EXPECT_EQ(OK, rv); | 1143 EXPECT_EQ(OK, rv); |
| 1138 | 1144 |
| 1139 // Number of network bytes received should increase because of SSL socket | 1145 // Number of network bytes received should increase because of SSL socket |
| 1140 // establishment. | 1146 // establishment. |
| 1141 EXPECT_GT(sock->GetTotalReceivedBytes(), 0); | 1147 EXPECT_GT(sock->GetTotalReceivedBytes(), 0); |
| 1142 | 1148 |
| 1143 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 1149 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1174 // Tests that SSLClientSocket properly handles when the underlying transport | 1180 // Tests that SSLClientSocket properly handles when the underlying transport |
| 1175 // synchronously fails a transport read in during the handshake. The error code | 1181 // synchronously fails a transport read in during the handshake. The error code |
| 1176 // should be preserved so SSLv3 fallback logic can condition on it. | 1182 // should be preserved so SSLv3 fallback logic can condition on it. |
| 1177 TEST_F(SSLClientSocketTest, Connect_WithSynchronousError) { | 1183 TEST_F(SSLClientSocketTest, Connect_WithSynchronousError) { |
| 1178 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1184 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1179 | 1185 |
| 1180 TestCompletionCallback callback; | 1186 TestCompletionCallback callback; |
| 1181 scoped_ptr<StreamSocket> real_transport( | 1187 scoped_ptr<StreamSocket> real_transport( |
| 1182 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1188 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1183 scoped_ptr<SynchronousErrorStreamSocket> transport( | 1189 scoped_ptr<SynchronousErrorStreamSocket> transport( |
| 1184 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1190 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1185 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1191 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1186 EXPECT_EQ(OK, rv); | 1192 EXPECT_EQ(OK, rv); |
| 1187 | 1193 |
| 1188 // Disable TLS False Start to avoid handshake non-determinism. | 1194 // Disable TLS False Start to avoid handshake non-determinism. |
| 1189 SSLConfig ssl_config; | 1195 SSLConfig ssl_config; |
| 1190 ssl_config.false_start_enabled = false; | 1196 ssl_config.false_start_enabled = false; |
| 1191 | 1197 |
| 1192 SynchronousErrorStreamSocket* raw_transport = transport.get(); | 1198 SynchronousErrorStreamSocket* raw_transport = transport.get(); |
| 1193 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1199 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1194 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config)); | 1200 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1201 ssl_config)); |
| 1195 | 1202 |
| 1196 raw_transport->SetNextWriteError(ERR_CONNECTION_RESET); | 1203 raw_transport->SetNextWriteError(ERR_CONNECTION_RESET); |
| 1197 | 1204 |
| 1198 rv = callback.GetResult(sock->Connect(callback.callback())); | 1205 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1199 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 1206 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 1200 EXPECT_FALSE(sock->IsConnected()); | 1207 EXPECT_FALSE(sock->IsConnected()); |
| 1201 } | 1208 } |
| 1202 | 1209 |
| 1203 // Tests that the SSLClientSocket properly handles when the underlying transport | 1210 // Tests that the SSLClientSocket properly handles when the underlying transport |
| 1204 // synchronously returns an error code - such as if an intermediary terminates | 1211 // synchronously returns an error code - such as if an intermediary terminates |
| 1205 // the socket connection uncleanly. | 1212 // the socket connection uncleanly. |
| 1206 // This is a regression test for http://crbug.com/238536 | 1213 // This is a regression test for http://crbug.com/238536 |
| 1207 TEST_F(SSLClientSocketTest, Read_WithSynchronousError) { | 1214 TEST_F(SSLClientSocketTest, Read_WithSynchronousError) { |
| 1208 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1215 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1209 | 1216 |
| 1210 TestCompletionCallback callback; | 1217 TestCompletionCallback callback; |
| 1211 scoped_ptr<StreamSocket> real_transport( | 1218 scoped_ptr<StreamSocket> real_transport( |
| 1212 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1219 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1213 scoped_ptr<SynchronousErrorStreamSocket> transport( | 1220 scoped_ptr<SynchronousErrorStreamSocket> transport( |
| 1214 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1221 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1215 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1222 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1216 EXPECT_EQ(OK, rv); | 1223 EXPECT_EQ(OK, rv); |
| 1217 | 1224 |
| 1218 // Disable TLS False Start to avoid handshake non-determinism. | 1225 // Disable TLS False Start to avoid handshake non-determinism. |
| 1219 SSLConfig ssl_config; | 1226 SSLConfig ssl_config; |
| 1220 ssl_config.false_start_enabled = false; | 1227 ssl_config.false_start_enabled = false; |
| 1221 | 1228 |
| 1222 SynchronousErrorStreamSocket* raw_transport = transport.get(); | 1229 SynchronousErrorStreamSocket* raw_transport = transport.get(); |
| 1223 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1230 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1224 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config)); | 1231 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1232 ssl_config)); |
| 1225 | 1233 |
| 1226 rv = callback.GetResult(sock->Connect(callback.callback())); | 1234 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1227 EXPECT_EQ(OK, rv); | 1235 EXPECT_EQ(OK, rv); |
| 1228 EXPECT_TRUE(sock->IsConnected()); | 1236 EXPECT_TRUE(sock->IsConnected()); |
| 1229 | 1237 |
| 1230 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 1238 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 1231 static const int kRequestTextSize = | 1239 static const int kRequestTextSize = |
| 1232 static_cast<int>(arraysize(request_text) - 1); | 1240 static_cast<int>(arraysize(request_text) - 1); |
| 1233 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize)); | 1241 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize)); |
| 1234 memcpy(request_buffer->data(), request_text, kRequestTextSize); | 1242 memcpy(request_buffer->data(), request_text, kRequestTextSize); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1255 // This is a regression test for http://crbug.com/249848 | 1263 // This is a regression test for http://crbug.com/249848 |
| 1256 TEST_F(SSLClientSocketTest, Write_WithSynchronousError) { | 1264 TEST_F(SSLClientSocketTest, Write_WithSynchronousError) { |
| 1257 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1265 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1258 | 1266 |
| 1259 TestCompletionCallback callback; | 1267 TestCompletionCallback callback; |
| 1260 scoped_ptr<StreamSocket> real_transport( | 1268 scoped_ptr<StreamSocket> real_transport( |
| 1261 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1269 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1262 // Note: |error_socket|'s ownership is handed to |transport|, but a pointer | 1270 // Note: |error_socket|'s ownership is handed to |transport|, but a pointer |
| 1263 // is retained in order to configure additional errors. | 1271 // is retained in order to configure additional errors. |
| 1264 scoped_ptr<SynchronousErrorStreamSocket> error_socket( | 1272 scoped_ptr<SynchronousErrorStreamSocket> error_socket( |
| 1265 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1273 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1266 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); | 1274 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); |
| 1267 scoped_ptr<FakeBlockingStreamSocket> transport( | 1275 scoped_ptr<FakeBlockingStreamSocket> transport( |
| 1268 new FakeBlockingStreamSocket(error_socket.Pass())); | 1276 new FakeBlockingStreamSocket(std::move(error_socket))); |
| 1269 FakeBlockingStreamSocket* raw_transport = transport.get(); | 1277 FakeBlockingStreamSocket* raw_transport = transport.get(); |
| 1270 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1278 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1271 EXPECT_EQ(OK, rv); | 1279 EXPECT_EQ(OK, rv); |
| 1272 | 1280 |
| 1273 // Disable TLS False Start to avoid handshake non-determinism. | 1281 // Disable TLS False Start to avoid handshake non-determinism. |
| 1274 SSLConfig ssl_config; | 1282 SSLConfig ssl_config; |
| 1275 ssl_config.false_start_enabled = false; | 1283 ssl_config.false_start_enabled = false; |
| 1276 | 1284 |
| 1277 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1285 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1278 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config)); | 1286 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1287 ssl_config)); |
| 1279 | 1288 |
| 1280 rv = callback.GetResult(sock->Connect(callback.callback())); | 1289 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1281 EXPECT_EQ(OK, rv); | 1290 EXPECT_EQ(OK, rv); |
| 1282 EXPECT_TRUE(sock->IsConnected()); | 1291 EXPECT_TRUE(sock->IsConnected()); |
| 1283 | 1292 |
| 1284 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 1293 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 1285 static const int kRequestTextSize = | 1294 static const int kRequestTextSize = |
| 1286 static_cast<int>(arraysize(request_text) - 1); | 1295 static_cast<int>(arraysize(request_text) - 1); |
| 1287 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize)); | 1296 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize)); |
| 1288 memcpy(request_buffer->data(), request_text, kRequestTextSize); | 1297 memcpy(request_buffer->data(), request_text, kRequestTextSize); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 // the socket. This is a regression test for part of https://crbug.com/381160. | 1330 // the socket. This is a regression test for part of https://crbug.com/381160. |
| 1322 TEST_F(SSLClientSocketTest, Write_WithSynchronousErrorNoRead) { | 1331 TEST_F(SSLClientSocketTest, Write_WithSynchronousErrorNoRead) { |
| 1323 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1332 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1324 | 1333 |
| 1325 TestCompletionCallback callback; | 1334 TestCompletionCallback callback; |
| 1326 scoped_ptr<StreamSocket> real_transport( | 1335 scoped_ptr<StreamSocket> real_transport( |
| 1327 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1336 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1328 // Note: intermediate sockets' ownership are handed to |sock|, but a pointer | 1337 // Note: intermediate sockets' ownership are handed to |sock|, but a pointer |
| 1329 // is retained in order to query them. | 1338 // is retained in order to query them. |
| 1330 scoped_ptr<SynchronousErrorStreamSocket> error_socket( | 1339 scoped_ptr<SynchronousErrorStreamSocket> error_socket( |
| 1331 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1340 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1332 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); | 1341 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); |
| 1333 scoped_ptr<CountingStreamSocket> counting_socket( | 1342 scoped_ptr<CountingStreamSocket> counting_socket( |
| 1334 new CountingStreamSocket(error_socket.Pass())); | 1343 new CountingStreamSocket(std::move(error_socket))); |
| 1335 CountingStreamSocket* raw_counting_socket = counting_socket.get(); | 1344 CountingStreamSocket* raw_counting_socket = counting_socket.get(); |
| 1336 int rv = callback.GetResult(counting_socket->Connect(callback.callback())); | 1345 int rv = callback.GetResult(counting_socket->Connect(callback.callback())); |
| 1337 ASSERT_EQ(OK, rv); | 1346 ASSERT_EQ(OK, rv); |
| 1338 | 1347 |
| 1339 // Disable TLS False Start to avoid handshake non-determinism. | 1348 // Disable TLS False Start to avoid handshake non-determinism. |
| 1340 SSLConfig ssl_config; | 1349 SSLConfig ssl_config; |
| 1341 ssl_config.false_start_enabled = false; | 1350 ssl_config.false_start_enabled = false; |
| 1342 | 1351 |
| 1343 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1352 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1344 counting_socket.Pass(), spawned_test_server()->host_port_pair(), | 1353 std::move(counting_socket), spawned_test_server()->host_port_pair(), |
| 1345 ssl_config)); | 1354 ssl_config)); |
| 1346 | 1355 |
| 1347 rv = callback.GetResult(sock->Connect(callback.callback())); | 1356 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1348 ASSERT_EQ(OK, rv); | 1357 ASSERT_EQ(OK, rv); |
| 1349 ASSERT_TRUE(sock->IsConnected()); | 1358 ASSERT_TRUE(sock->IsConnected()); |
| 1350 | 1359 |
| 1351 // Simulate an unclean/forcible shutdown on the underlying socket. | 1360 // Simulate an unclean/forcible shutdown on the underlying socket. |
| 1352 raw_error_socket->SetNextWriteError(ERR_CONNECTION_RESET); | 1361 raw_error_socket->SetNextWriteError(ERR_CONNECTION_RESET); |
| 1353 | 1362 |
| 1354 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 1363 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 // Regression test for http://crbug.com/232633 | 1430 // Regression test for http://crbug.com/232633 |
| 1422 TEST_F(SSLClientSocketTest, Read_DeleteWhilePendingFullDuplex) { | 1431 TEST_F(SSLClientSocketTest, Read_DeleteWhilePendingFullDuplex) { |
| 1423 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1432 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1424 | 1433 |
| 1425 TestCompletionCallback callback; | 1434 TestCompletionCallback callback; |
| 1426 scoped_ptr<StreamSocket> real_transport( | 1435 scoped_ptr<StreamSocket> real_transport( |
| 1427 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1436 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1428 // Note: |error_socket|'s ownership is handed to |transport|, but a pointer | 1437 // Note: |error_socket|'s ownership is handed to |transport|, but a pointer |
| 1429 // is retained in order to configure additional errors. | 1438 // is retained in order to configure additional errors. |
| 1430 scoped_ptr<SynchronousErrorStreamSocket> error_socket( | 1439 scoped_ptr<SynchronousErrorStreamSocket> error_socket( |
| 1431 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1440 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1432 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); | 1441 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); |
| 1433 scoped_ptr<FakeBlockingStreamSocket> transport( | 1442 scoped_ptr<FakeBlockingStreamSocket> transport( |
| 1434 new FakeBlockingStreamSocket(error_socket.Pass())); | 1443 new FakeBlockingStreamSocket(std::move(error_socket))); |
| 1435 FakeBlockingStreamSocket* raw_transport = transport.get(); | 1444 FakeBlockingStreamSocket* raw_transport = transport.get(); |
| 1436 | 1445 |
| 1437 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1446 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1438 EXPECT_EQ(OK, rv); | 1447 EXPECT_EQ(OK, rv); |
| 1439 | 1448 |
| 1440 // Disable TLS False Start to avoid handshake non-determinism. | 1449 // Disable TLS False Start to avoid handshake non-determinism. |
| 1441 SSLConfig ssl_config; | 1450 SSLConfig ssl_config; |
| 1442 ssl_config.false_start_enabled = false; | 1451 ssl_config.false_start_enabled = false; |
| 1443 | 1452 |
| 1444 scoped_ptr<SSLClientSocket> sock = CreateSSLClientSocket( | 1453 scoped_ptr<SSLClientSocket> sock = CreateSSLClientSocket( |
| 1445 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config); | 1454 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1455 ssl_config); |
| 1446 | 1456 |
| 1447 rv = callback.GetResult(sock->Connect(callback.callback())); | 1457 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1448 EXPECT_EQ(OK, rv); | 1458 EXPECT_EQ(OK, rv); |
| 1449 EXPECT_TRUE(sock->IsConnected()); | 1459 EXPECT_TRUE(sock->IsConnected()); |
| 1450 | 1460 |
| 1451 std::string request_text = "GET / HTTP/1.1\r\nUser-Agent: long browser name "; | 1461 std::string request_text = "GET / HTTP/1.1\r\nUser-Agent: long browser name "; |
| 1452 request_text.append(20 * 1024, '*'); | 1462 request_text.append(20 * 1024, '*'); |
| 1453 request_text.append("\r\n\r\n"); | 1463 request_text.append("\r\n\r\n"); |
| 1454 scoped_refptr<DrainableIOBuffer> request_buffer(new DrainableIOBuffer( | 1464 scoped_refptr<DrainableIOBuffer> request_buffer(new DrainableIOBuffer( |
| 1455 new StringIOBuffer(request_text), request_text.size())); | 1465 new StringIOBuffer(request_text), request_text.size())); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1529 // Regression test for http://crbug.com/335557 | 1539 // Regression test for http://crbug.com/335557 |
| 1530 TEST_F(SSLClientSocketTest, Read_WithWriteError) { | 1540 TEST_F(SSLClientSocketTest, Read_WithWriteError) { |
| 1531 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1541 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1532 | 1542 |
| 1533 TestCompletionCallback callback; | 1543 TestCompletionCallback callback; |
| 1534 scoped_ptr<StreamSocket> real_transport( | 1544 scoped_ptr<StreamSocket> real_transport( |
| 1535 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1545 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1536 // Note: |error_socket|'s ownership is handed to |transport|, but a pointer | 1546 // Note: |error_socket|'s ownership is handed to |transport|, but a pointer |
| 1537 // is retained in order to configure additional errors. | 1547 // is retained in order to configure additional errors. |
| 1538 scoped_ptr<SynchronousErrorStreamSocket> error_socket( | 1548 scoped_ptr<SynchronousErrorStreamSocket> error_socket( |
| 1539 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1549 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1540 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); | 1550 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); |
| 1541 scoped_ptr<FakeBlockingStreamSocket> transport( | 1551 scoped_ptr<FakeBlockingStreamSocket> transport( |
| 1542 new FakeBlockingStreamSocket(error_socket.Pass())); | 1552 new FakeBlockingStreamSocket(std::move(error_socket))); |
| 1543 FakeBlockingStreamSocket* raw_transport = transport.get(); | 1553 FakeBlockingStreamSocket* raw_transport = transport.get(); |
| 1544 | 1554 |
| 1545 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1555 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1546 EXPECT_EQ(OK, rv); | 1556 EXPECT_EQ(OK, rv); |
| 1547 | 1557 |
| 1548 // Disable TLS False Start to avoid handshake non-determinism. | 1558 // Disable TLS False Start to avoid handshake non-determinism. |
| 1549 SSLConfig ssl_config; | 1559 SSLConfig ssl_config; |
| 1550 ssl_config.false_start_enabled = false; | 1560 ssl_config.false_start_enabled = false; |
| 1551 | 1561 |
| 1552 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1562 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1553 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config)); | 1563 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1564 ssl_config)); |
| 1554 | 1565 |
| 1555 rv = callback.GetResult(sock->Connect(callback.callback())); | 1566 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1556 EXPECT_EQ(OK, rv); | 1567 EXPECT_EQ(OK, rv); |
| 1557 EXPECT_TRUE(sock->IsConnected()); | 1568 EXPECT_TRUE(sock->IsConnected()); |
| 1558 | 1569 |
| 1559 // Send a request so there is something to read from the socket. | 1570 // Send a request so there is something to read from the socket. |
| 1560 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 1571 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 1561 static const int kRequestTextSize = | 1572 static const int kRequestTextSize = |
| 1562 static_cast<int>(arraysize(request_text) - 1); | 1573 static_cast<int>(arraysize(request_text) - 1); |
| 1563 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize)); | 1574 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize)); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1623 | 1634 |
| 1624 // Tests that SSLClientSocket fails the handshake if the underlying | 1635 // Tests that SSLClientSocket fails the handshake if the underlying |
| 1625 // transport is cleanly closed. | 1636 // transport is cleanly closed. |
| 1626 TEST_F(SSLClientSocketTest, Connect_WithZeroReturn) { | 1637 TEST_F(SSLClientSocketTest, Connect_WithZeroReturn) { |
| 1627 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1638 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1628 | 1639 |
| 1629 TestCompletionCallback callback; | 1640 TestCompletionCallback callback; |
| 1630 scoped_ptr<StreamSocket> real_transport( | 1641 scoped_ptr<StreamSocket> real_transport( |
| 1631 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1642 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1632 scoped_ptr<SynchronousErrorStreamSocket> transport( | 1643 scoped_ptr<SynchronousErrorStreamSocket> transport( |
| 1633 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1644 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1634 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1645 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1635 EXPECT_EQ(OK, rv); | 1646 EXPECT_EQ(OK, rv); |
| 1636 | 1647 |
| 1637 SynchronousErrorStreamSocket* raw_transport = transport.get(); | 1648 SynchronousErrorStreamSocket* raw_transport = transport.get(); |
| 1638 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1649 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1639 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 1650 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1651 SSLConfig())); |
| 1640 | 1652 |
| 1641 raw_transport->SetNextReadError(0); | 1653 raw_transport->SetNextReadError(0); |
| 1642 | 1654 |
| 1643 rv = callback.GetResult(sock->Connect(callback.callback())); | 1655 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1644 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); | 1656 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); |
| 1645 EXPECT_FALSE(sock->IsConnected()); | 1657 EXPECT_FALSE(sock->IsConnected()); |
| 1646 } | 1658 } |
| 1647 | 1659 |
| 1648 // Tests that SSLClientSocket returns a Read of size 0 if the underlying socket | 1660 // Tests that SSLClientSocket returns a Read of size 0 if the underlying socket |
| 1649 // is cleanly closed, but the peer does not send close_notify. | 1661 // is cleanly closed, but the peer does not send close_notify. |
| 1650 // This is a regression test for https://crbug.com/422246 | 1662 // This is a regression test for https://crbug.com/422246 |
| 1651 TEST_F(SSLClientSocketTest, Read_WithZeroReturn) { | 1663 TEST_F(SSLClientSocketTest, Read_WithZeroReturn) { |
| 1652 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1664 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1653 | 1665 |
| 1654 TestCompletionCallback callback; | 1666 TestCompletionCallback callback; |
| 1655 scoped_ptr<StreamSocket> real_transport( | 1667 scoped_ptr<StreamSocket> real_transport( |
| 1656 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1668 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1657 scoped_ptr<SynchronousErrorStreamSocket> transport( | 1669 scoped_ptr<SynchronousErrorStreamSocket> transport( |
| 1658 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1670 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1659 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1671 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1660 EXPECT_EQ(OK, rv); | 1672 EXPECT_EQ(OK, rv); |
| 1661 | 1673 |
| 1662 // Disable TLS False Start to ensure the handshake has completed. | 1674 // Disable TLS False Start to ensure the handshake has completed. |
| 1663 SSLConfig ssl_config; | 1675 SSLConfig ssl_config; |
| 1664 ssl_config.false_start_enabled = false; | 1676 ssl_config.false_start_enabled = false; |
| 1665 | 1677 |
| 1666 SynchronousErrorStreamSocket* raw_transport = transport.get(); | 1678 SynchronousErrorStreamSocket* raw_transport = transport.get(); |
| 1667 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1679 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1668 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config)); | 1680 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1681 ssl_config)); |
| 1669 | 1682 |
| 1670 rv = callback.GetResult(sock->Connect(callback.callback())); | 1683 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1671 EXPECT_EQ(OK, rv); | 1684 EXPECT_EQ(OK, rv); |
| 1672 EXPECT_TRUE(sock->IsConnected()); | 1685 EXPECT_TRUE(sock->IsConnected()); |
| 1673 | 1686 |
| 1674 raw_transport->SetNextReadError(0); | 1687 raw_transport->SetNextReadError(0); |
| 1675 scoped_refptr<IOBuffer> buf(new IOBuffer(4096)); | 1688 scoped_refptr<IOBuffer> buf(new IOBuffer(4096)); |
| 1676 rv = callback.GetResult(sock->Read(buf.get(), 4096, callback.callback())); | 1689 rv = callback.GetResult(sock->Read(buf.get(), 4096, callback.callback())); |
| 1677 EXPECT_EQ(0, rv); | 1690 EXPECT_EQ(0, rv); |
| 1678 } | 1691 } |
| 1679 | 1692 |
| 1680 // Tests that SSLClientSocket cleanly returns a Read of size 0 if the | 1693 // Tests that SSLClientSocket cleanly returns a Read of size 0 if the |
| 1681 // underlying socket is cleanly closed asynchronously. | 1694 // underlying socket is cleanly closed asynchronously. |
| 1682 // This is a regression test for https://crbug.com/422246 | 1695 // This is a regression test for https://crbug.com/422246 |
| 1683 TEST_F(SSLClientSocketTest, Read_WithAsyncZeroReturn) { | 1696 TEST_F(SSLClientSocketTest, Read_WithAsyncZeroReturn) { |
| 1684 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1697 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1685 | 1698 |
| 1686 TestCompletionCallback callback; | 1699 TestCompletionCallback callback; |
| 1687 scoped_ptr<StreamSocket> real_transport( | 1700 scoped_ptr<StreamSocket> real_transport( |
| 1688 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1701 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1689 scoped_ptr<SynchronousErrorStreamSocket> error_socket( | 1702 scoped_ptr<SynchronousErrorStreamSocket> error_socket( |
| 1690 new SynchronousErrorStreamSocket(real_transport.Pass())); | 1703 new SynchronousErrorStreamSocket(std::move(real_transport))); |
| 1691 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); | 1704 SynchronousErrorStreamSocket* raw_error_socket = error_socket.get(); |
| 1692 scoped_ptr<FakeBlockingStreamSocket> transport( | 1705 scoped_ptr<FakeBlockingStreamSocket> transport( |
| 1693 new FakeBlockingStreamSocket(error_socket.Pass())); | 1706 new FakeBlockingStreamSocket(std::move(error_socket))); |
| 1694 FakeBlockingStreamSocket* raw_transport = transport.get(); | 1707 FakeBlockingStreamSocket* raw_transport = transport.get(); |
| 1695 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1708 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1696 EXPECT_EQ(OK, rv); | 1709 EXPECT_EQ(OK, rv); |
| 1697 | 1710 |
| 1698 // Disable TLS False Start to ensure the handshake has completed. | 1711 // Disable TLS False Start to ensure the handshake has completed. |
| 1699 SSLConfig ssl_config; | 1712 SSLConfig ssl_config; |
| 1700 ssl_config.false_start_enabled = false; | 1713 ssl_config.false_start_enabled = false; |
| 1701 | 1714 |
| 1702 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1715 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1703 transport.Pass(), spawned_test_server()->host_port_pair(), ssl_config)); | 1716 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1717 ssl_config)); |
| 1704 | 1718 |
| 1705 rv = callback.GetResult(sock->Connect(callback.callback())); | 1719 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1706 EXPECT_EQ(OK, rv); | 1720 EXPECT_EQ(OK, rv); |
| 1707 EXPECT_TRUE(sock->IsConnected()); | 1721 EXPECT_TRUE(sock->IsConnected()); |
| 1708 | 1722 |
| 1709 raw_error_socket->SetNextReadError(0); | 1723 raw_error_socket->SetNextReadError(0); |
| 1710 raw_transport->BlockReadResult(); | 1724 raw_transport->BlockReadResult(); |
| 1711 scoped_refptr<IOBuffer> buf(new IOBuffer(4096)); | 1725 scoped_refptr<IOBuffer> buf(new IOBuffer(4096)); |
| 1712 rv = sock->Read(buf.get(), 4096, callback.callback()); | 1726 rv = sock->Read(buf.get(), 4096, callback.callback()); |
| 1713 EXPECT_EQ(ERR_IO_PENDING, rv); | 1727 EXPECT_EQ(ERR_IO_PENDING, rv); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1760 } | 1774 } |
| 1761 | 1775 |
| 1762 TEST_F(SSLClientSocketTest, Read_ManySmallRecords) { | 1776 TEST_F(SSLClientSocketTest, Read_ManySmallRecords) { |
| 1763 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1777 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1764 | 1778 |
| 1765 TestCompletionCallback callback; | 1779 TestCompletionCallback callback; |
| 1766 | 1780 |
| 1767 scoped_ptr<StreamSocket> real_transport( | 1781 scoped_ptr<StreamSocket> real_transport( |
| 1768 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1782 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1769 scoped_ptr<ReadBufferingStreamSocket> transport( | 1783 scoped_ptr<ReadBufferingStreamSocket> transport( |
| 1770 new ReadBufferingStreamSocket(real_transport.Pass())); | 1784 new ReadBufferingStreamSocket(std::move(real_transport))); |
| 1771 ReadBufferingStreamSocket* raw_transport = transport.get(); | 1785 ReadBufferingStreamSocket* raw_transport = transport.get(); |
| 1772 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1786 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1773 ASSERT_EQ(OK, rv); | 1787 ASSERT_EQ(OK, rv); |
| 1774 | 1788 |
| 1775 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1789 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1776 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 1790 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1791 SSLConfig())); |
| 1777 | 1792 |
| 1778 rv = callback.GetResult(sock->Connect(callback.callback())); | 1793 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1779 ASSERT_EQ(OK, rv); | 1794 ASSERT_EQ(OK, rv); |
| 1780 ASSERT_TRUE(sock->IsConnected()); | 1795 ASSERT_TRUE(sock->IsConnected()); |
| 1781 | 1796 |
| 1782 const char request_text[] = "GET /ssl-many-small-records HTTP/1.0\r\n\r\n"; | 1797 const char request_text[] = "GET /ssl-many-small-records HTTP/1.0\r\n\r\n"; |
| 1783 scoped_refptr<IOBuffer> request_buffer( | 1798 scoped_refptr<IOBuffer> request_buffer( |
| 1784 new IOBuffer(arraysize(request_text) - 1)); | 1799 new IOBuffer(arraysize(request_text) - 1)); |
| 1785 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 1800 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
| 1786 | 1801 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1833 | 1848 |
| 1834 TestCompletionCallback callback; | 1849 TestCompletionCallback callback; |
| 1835 TestNetLog log; | 1850 TestNetLog log; |
| 1836 log.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes()); | 1851 log.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes()); |
| 1837 scoped_ptr<StreamSocket> transport( | 1852 scoped_ptr<StreamSocket> transport( |
| 1838 new TCPClientSocket(addr(), &log, NetLog::Source())); | 1853 new TCPClientSocket(addr(), &log, NetLog::Source())); |
| 1839 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1854 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1840 EXPECT_EQ(OK, rv); | 1855 EXPECT_EQ(OK, rv); |
| 1841 | 1856 |
| 1842 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1857 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1843 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 1858 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1859 SSLConfig())); |
| 1844 | 1860 |
| 1845 rv = callback.GetResult(sock->Connect(callback.callback())); | 1861 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1846 EXPECT_EQ(OK, rv); | 1862 EXPECT_EQ(OK, rv); |
| 1847 EXPECT_TRUE(sock->IsConnected()); | 1863 EXPECT_TRUE(sock->IsConnected()); |
| 1848 | 1864 |
| 1849 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 1865 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 1850 scoped_refptr<IOBuffer> request_buffer( | 1866 scoped_refptr<IOBuffer> request_buffer( |
| 1851 new IOBuffer(arraysize(request_text) - 1)); | 1867 new IOBuffer(arraysize(request_text) - 1)); |
| 1852 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 1868 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
| 1853 | 1869 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1901 | 1917 |
| 1902 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1918 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1903 | 1919 |
| 1904 TestCompletionCallback callback; | 1920 TestCompletionCallback callback; |
| 1905 scoped_ptr<StreamSocket> transport( | 1921 scoped_ptr<StreamSocket> transport( |
| 1906 new MockTCPClientSocket(addr(), NULL, &data)); | 1922 new MockTCPClientSocket(addr(), NULL, &data)); |
| 1907 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1923 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1908 EXPECT_EQ(OK, rv); | 1924 EXPECT_EQ(OK, rv); |
| 1909 | 1925 |
| 1910 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 1926 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 1911 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 1927 std::move(transport), spawned_test_server()->host_port_pair(), |
| 1928 SSLConfig())); |
| 1912 | 1929 |
| 1913 rv = callback.GetResult(sock->Connect(callback.callback())); | 1930 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1914 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); | 1931 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); |
| 1915 } | 1932 } |
| 1916 | 1933 |
| 1917 TEST_F(SSLClientSocketTest, CipherSuiteDisables) { | 1934 TEST_F(SSLClientSocketTest, CipherSuiteDisables) { |
| 1918 // Rather than exhaustively disabling every AES_128_CBC ciphersuite defined at | 1935 // Rather than exhaustively disabling every AES_128_CBC ciphersuite defined at |
| 1919 // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml, only | 1936 // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml, only |
| 1920 // disabling those cipher suites that the test server actually implements. | 1937 // disabling those cipher suites that the test server actually implements. |
| 1921 const uint16_t kCiphersToDisable[] = { | 1938 const uint16_t kCiphersToDisable[] = { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1945 TEST_F(SSLClientSocketTest, ClientSocketHandleNotFromPool) { | 1962 TEST_F(SSLClientSocketTest, ClientSocketHandleNotFromPool) { |
| 1946 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 1963 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 1947 | 1964 |
| 1948 TestCompletionCallback callback; | 1965 TestCompletionCallback callback; |
| 1949 scoped_ptr<StreamSocket> transport( | 1966 scoped_ptr<StreamSocket> transport( |
| 1950 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 1967 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 1951 int rv = callback.GetResult(transport->Connect(callback.callback())); | 1968 int rv = callback.GetResult(transport->Connect(callback.callback())); |
| 1952 EXPECT_EQ(OK, rv); | 1969 EXPECT_EQ(OK, rv); |
| 1953 | 1970 |
| 1954 scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle()); | 1971 scoped_ptr<ClientSocketHandle> socket_handle(new ClientSocketHandle()); |
| 1955 socket_handle->SetSocket(transport.Pass()); | 1972 socket_handle->SetSocket(std::move(transport)); |
| 1956 | 1973 |
| 1957 scoped_ptr<SSLClientSocket> sock(socket_factory_->CreateSSLClientSocket( | 1974 scoped_ptr<SSLClientSocket> sock(socket_factory_->CreateSSLClientSocket( |
| 1958 socket_handle.Pass(), spawned_test_server()->host_port_pair(), | 1975 std::move(socket_handle), spawned_test_server()->host_port_pair(), |
| 1959 SSLConfig(), context_)); | 1976 SSLConfig(), context_)); |
| 1960 | 1977 |
| 1961 EXPECT_FALSE(sock->IsConnected()); | 1978 EXPECT_FALSE(sock->IsConnected()); |
| 1962 rv = callback.GetResult(sock->Connect(callback.callback())); | 1979 rv = callback.GetResult(sock->Connect(callback.callback())); |
| 1963 EXPECT_EQ(OK, rv); | 1980 EXPECT_EQ(OK, rv); |
| 1964 } | 1981 } |
| 1965 | 1982 |
| 1966 // Verifies that SSLClientSocket::ExportKeyingMaterial return a success | 1983 // Verifies that SSLClientSocket::ExportKeyingMaterial return a success |
| 1967 // code and different keying label results in different keying material. | 1984 // code and different keying label results in different keying material. |
| 1968 TEST_F(SSLClientSocketTest, ExportKeyingMaterial) { | 1985 TEST_F(SSLClientSocketTest, ExportKeyingMaterial) { |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2465 // Tests that IsConnectedAndIdle treats a socket as idle even if a Write hasn't | 2482 // Tests that IsConnectedAndIdle treats a socket as idle even if a Write hasn't |
| 2466 // been flushed completely out of SSLClientSocket's internal buffers. This is a | 2483 // been flushed completely out of SSLClientSocket's internal buffers. This is a |
| 2467 // regression test for https://crbug.com/466147. | 2484 // regression test for https://crbug.com/466147. |
| 2468 TEST_F(SSLClientSocketTest, ReusableAfterWrite) { | 2485 TEST_F(SSLClientSocketTest, ReusableAfterWrite) { |
| 2469 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); | 2486 ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
| 2470 | 2487 |
| 2471 TestCompletionCallback callback; | 2488 TestCompletionCallback callback; |
| 2472 scoped_ptr<StreamSocket> real_transport( | 2489 scoped_ptr<StreamSocket> real_transport( |
| 2473 new TCPClientSocket(addr(), NULL, NetLog::Source())); | 2490 new TCPClientSocket(addr(), NULL, NetLog::Source())); |
| 2474 scoped_ptr<FakeBlockingStreamSocket> transport( | 2491 scoped_ptr<FakeBlockingStreamSocket> transport( |
| 2475 new FakeBlockingStreamSocket(real_transport.Pass())); | 2492 new FakeBlockingStreamSocket(std::move(real_transport))); |
| 2476 FakeBlockingStreamSocket* raw_transport = transport.get(); | 2493 FakeBlockingStreamSocket* raw_transport = transport.get(); |
| 2477 ASSERT_EQ(OK, callback.GetResult(transport->Connect(callback.callback()))); | 2494 ASSERT_EQ(OK, callback.GetResult(transport->Connect(callback.callback()))); |
| 2478 | 2495 |
| 2479 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( | 2496 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( |
| 2480 transport.Pass(), spawned_test_server()->host_port_pair(), SSLConfig())); | 2497 std::move(transport), spawned_test_server()->host_port_pair(), |
| 2498 SSLConfig())); |
| 2481 ASSERT_EQ(OK, callback.GetResult(sock->Connect(callback.callback()))); | 2499 ASSERT_EQ(OK, callback.GetResult(sock->Connect(callback.callback()))); |
| 2482 | 2500 |
| 2483 // Block any application data from reaching the network. | 2501 // Block any application data from reaching the network. |
| 2484 raw_transport->BlockWrite(); | 2502 raw_transport->BlockWrite(); |
| 2485 | 2503 |
| 2486 // Write a partial HTTP request. | 2504 // Write a partial HTTP request. |
| 2487 const char kRequestText[] = "GET / HTTP/1.0"; | 2505 const char kRequestText[] = "GET / HTTP/1.0"; |
| 2488 const size_t kRequestLen = arraysize(kRequestText) - 1; | 2506 const size_t kRequestLen = arraysize(kRequestText) - 1; |
| 2489 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestLen)); | 2507 scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestLen)); |
| 2490 memcpy(request_buffer->data(), kRequestText, kRequestLen); | 2508 memcpy(request_buffer->data(), kRequestText, kRequestLen); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2522 ASSERT_TRUE(sock_->GetSSLInfo(&ssl_info)); | 2540 ASSERT_TRUE(sock_->GetSSLInfo(&ssl_info)); |
| 2523 EXPECT_EQ(SSLInfo::HANDSHAKE_RESUME, ssl_info.handshake_type); | 2541 EXPECT_EQ(SSLInfo::HANDSHAKE_RESUME, ssl_info.handshake_type); |
| 2524 sock_.reset(); | 2542 sock_.reset(); |
| 2525 | 2543 |
| 2526 // Using a different HostPortPair uses a different session cache key. | 2544 // Using a different HostPortPair uses a different session cache key. |
| 2527 scoped_ptr<StreamSocket> transport( | 2545 scoped_ptr<StreamSocket> transport( |
| 2528 new TCPClientSocket(addr(), &log_, NetLog::Source())); | 2546 new TCPClientSocket(addr(), &log_, NetLog::Source())); |
| 2529 TestCompletionCallback callback; | 2547 TestCompletionCallback callback; |
| 2530 ASSERT_EQ(OK, callback.GetResult(transport->Connect(callback.callback()))); | 2548 ASSERT_EQ(OK, callback.GetResult(transport->Connect(callback.callback()))); |
| 2531 scoped_ptr<SSLClientSocket> sock = CreateSSLClientSocket( | 2549 scoped_ptr<SSLClientSocket> sock = CreateSSLClientSocket( |
| 2532 transport.Pass(), HostPortPair("example.com", 443), ssl_config); | 2550 std::move(transport), HostPortPair("example.com", 443), ssl_config); |
| 2533 ASSERT_EQ(OK, callback.GetResult(sock->Connect(callback.callback()))); | 2551 ASSERT_EQ(OK, callback.GetResult(sock->Connect(callback.callback()))); |
| 2534 ASSERT_TRUE(sock->GetSSLInfo(&ssl_info)); | 2552 ASSERT_TRUE(sock->GetSSLInfo(&ssl_info)); |
| 2535 EXPECT_EQ(SSLInfo::HANDSHAKE_FULL, ssl_info.handshake_type); | 2553 EXPECT_EQ(SSLInfo::HANDSHAKE_FULL, ssl_info.handshake_type); |
| 2536 sock.reset(); | 2554 sock.reset(); |
| 2537 | 2555 |
| 2538 SSLClientSocket::ClearSessionCache(); | 2556 SSLClientSocket::ClearSessionCache(); |
| 2539 | 2557 |
| 2540 // After clearing the session cache, the next handshake doesn't resume. | 2558 // After clearing the session cache, the next handshake doesn't resume. |
| 2541 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); | 2559 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); |
| 2542 ASSERT_EQ(OK, rv); | 2560 ASSERT_EQ(OK, rv); |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3215 int rv; | 3233 int rv; |
| 3216 ASSERT_TRUE(CreateAndConnectSSLClientSocket(client_config, &rv)); | 3234 ASSERT_TRUE(CreateAndConnectSSLClientSocket(client_config, &rv)); |
| 3217 EXPECT_EQ(OK, rv); | 3235 EXPECT_EQ(OK, rv); |
| 3218 | 3236 |
| 3219 std::string proto; | 3237 std::string proto; |
| 3220 EXPECT_EQ(SSLClientSocket::kNextProtoUnsupported, | 3238 EXPECT_EQ(SSLClientSocket::kNextProtoUnsupported, |
| 3221 sock_->GetNextProto(&proto)); | 3239 sock_->GetNextProto(&proto)); |
| 3222 } | 3240 } |
| 3223 | 3241 |
| 3224 } // namespace net | 3242 } // namespace net |
| OLD | NEW |