| Index: net/socket/ssl_client_socket_mac.cc
|
| diff --git a/net/socket/ssl_client_socket_mac.cc b/net/socket/ssl_client_socket_mac.cc
|
| index 6f87260b321a94e11e9d81b69f29ec4c6f07972d..49f5e8beb1a326dc3c754044e0330a61133aaa4d 100644
|
| --- a/net/socket/ssl_client_socket_mac.cc
|
| +++ b/net/socket/ssl_client_socket_mac.cc
|
| @@ -531,7 +531,7 @@ SSLClientSocketMac::SSLClientSocketMac(ClientSocketHandle* transport_socket,
|
| transport_(transport_socket),
|
| host_and_port_(host_and_port),
|
| ssl_config_(ssl_config),
|
| - user_connect_callback_(NULL),
|
| + old_user_connect_callback_(NULL),
|
| user_read_callback_(NULL),
|
| user_write_callback_(NULL),
|
| user_read_buf_len_(0),
|
| @@ -558,7 +558,29 @@ SSLClientSocketMac::~SSLClientSocketMac() {
|
| int SSLClientSocketMac::Connect(OldCompletionCallback* callback) {
|
| DCHECK(transport_.get());
|
| DCHECK(next_handshake_state_ == STATE_NONE);
|
| - DCHECK(!user_connect_callback_);
|
| + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
|
| +
|
| + net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
|
| +
|
| + int rv = InitializeSSLContext();
|
| + if (rv != OK) {
|
| + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
|
| + return rv;
|
| + }
|
| +
|
| + next_handshake_state_ = STATE_HANDSHAKE;
|
| + rv = DoHandshakeLoop(OK);
|
| + if (rv == ERR_IO_PENDING) {
|
| + old_user_connect_callback_ = callback;
|
| + } else {
|
| + net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
|
| + }
|
| + return rv;
|
| +}
|
| +int SSLClientSocketMac::Connect(const CompletionCallback& callback) {
|
| + DCHECK(transport_.get());
|
| + DCHECK(next_handshake_state_ == STATE_NONE);
|
| + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
|
|
|
| net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT, NULL);
|
|
|
| @@ -894,11 +916,17 @@ int SSLClientSocketMac::InitializeSSLContext() {
|
|
|
| void SSLClientSocketMac::DoConnectCallback(int rv) {
|
| DCHECK(rv != ERR_IO_PENDING);
|
| - DCHECK(user_connect_callback_);
|
| + DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null());
|
|
|
| - OldCompletionCallback* c = user_connect_callback_;
|
| - user_connect_callback_ = NULL;
|
| - c->Run(rv > OK ? OK : rv);
|
| + if (old_user_connect_callback_) {
|
| + OldCompletionCallback* c = old_user_connect_callback_;
|
| + old_user_connect_callback_ = NULL;
|
| + c->Run(rv > OK ? OK : rv);
|
| + } else {
|
| + CompletionCallback c = user_connect_callback_;
|
| + user_connect_callback_.Reset();
|
| + c.Run(rv > OK ? OK : rv);
|
| + }
|
| }
|
|
|
| void SSLClientSocketMac::DoReadCallback(int rv) {
|
| @@ -934,7 +962,7 @@ void SSLClientSocketMac::OnHandshakeIOComplete(int result) {
|
| // renegotiating (which occurs because we are in the middle of a Read
|
| // when the renegotiation process starts). So we complete the Read
|
| // here.
|
| - if (!user_connect_callback_) {
|
| + if (!old_user_connect_callback_ && user_connect_callback_.is_null()) {
|
| DoReadCallback(rv);
|
| return;
|
| }
|
| @@ -1272,7 +1300,7 @@ int SSLClientSocketMac::DoCompletedRenegotiation(int result) {
|
| }
|
|
|
| void SSLClientSocketMac::DidCompleteRenegotiation() {
|
| - DCHECK(!user_connect_callback_);
|
| + DCHECK(!old_user_connect_callback_ && user_connect_callback_.is_null());
|
| renegotiating_ = false;
|
| next_handshake_state_ = STATE_COMPLETED_RENEGOTIATION;
|
| }
|
|
|