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

Unified Diff: jingle/notifier/base/fake_ssl_client_socket.cc

Issue 8801004: base::Bind: Convert StreamSocket::Connect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes Created 9 years 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 side-by-side diff with in-line comments
Download patch
Index: jingle/notifier/base/fake_ssl_client_socket.cc
diff --git a/jingle/notifier/base/fake_ssl_client_socket.cc b/jingle/notifier/base/fake_ssl_client_socket.cc
index 2ab7ef5d2529a0fa4c4004a490b558de00a2d53d..e2470387eb1c9e699ac20396bc8d047104192d3b 100644
--- a/jingle/notifier/base/fake_ssl_client_socket.cc
+++ b/jingle/notifier/base/fake_ssl_client_socket.cc
@@ -89,7 +89,7 @@ FakeSSLClientSocket::FakeSSLClientSocket(
transport_socket_(transport_socket),
next_handshake_state_(STATE_NONE),
handshake_completed_(false),
- user_connect_callback_(NULL),
+ old_user_connect_callback_(NULL),
write_buf_(NewDrainableIOBufferWithSize(arraysize(kSslClientHello))),
read_buf_(NewDrainableIOBufferWithSize(arraysize(kSslServerHello))) {
CHECK(transport_socket_.get());
@@ -126,17 +126,34 @@ int FakeSSLClientSocket::Connect(net::OldCompletionCallback* callback) {
DCHECK(callback);
DCHECK_EQ(next_handshake_state_, STATE_NONE);
DCHECK(!handshake_completed_);
- DCHECK(!user_connect_callback_);
+ DCHECK(!old_user_connect_callback_);
DCHECK_EQ(write_buf_->BytesConsumed(), 0);
DCHECK_EQ(read_buf_->BytesConsumed(), 0);
next_handshake_state_ = STATE_CONNECT;
int status = DoHandshakeLoop();
if (status == net::ERR_IO_PENDING) {
- user_connect_callback_ = callback;
+ old_user_connect_callback_ = callback;
}
return status;
}
+int FakeSSLClientSocket::Connect(const net::CompletionCallback& callback) {
+ // We don't support synchronous operation, even if
+ // |transport_socket_| does.
+ DCHECK(!callback.is_null());
+ DCHECK_EQ(next_handshake_state_, STATE_NONE);
+ DCHECK(!handshake_completed_);
+ DCHECK(user_connect_callback_.is_null());
+ DCHECK_EQ(write_buf_->BytesConsumed(), 0);
+ DCHECK_EQ(read_buf_->BytesConsumed(), 0);
+
+ next_handshake_state_ = STATE_CONNECT;
+ int status = DoHandshakeLoop();
+ if (status == net::ERR_IO_PENDING)
+ user_connect_callback_ = callback;
+
+ return status;
+}
int FakeSSLClientSocket::DoHandshakeLoop() {
DCHECK_NE(next_handshake_state_, STATE_NONE);
@@ -167,9 +184,16 @@ int FakeSSLClientSocket::DoHandshakeLoop() {
void FakeSSLClientSocket::RunUserConnectCallback(int status) {
DCHECK_LE(status, net::OK);
next_handshake_state_ = STATE_NONE;
- net::OldCompletionCallback* user_connect_callback = user_connect_callback_;
- user_connect_callback_ = NULL;
- user_connect_callback->Run(status);
+ if (old_user_connect_callback_) {
+ net::OldCompletionCallback* user_connect_callback =
+ old_user_connect_callback_;
+ old_user_connect_callback_ = NULL;
+ user_connect_callback->Run(status);
+ } else {
+ net::CompletionCallback user_connect_callback = user_connect_callback_;
+ user_connect_callback_.Reset();
+ user_connect_callback.Run(status);
+ }
}
void FakeSSLClientSocket::DoHandshakeLoopWithUserConnectCallback() {
@@ -191,7 +215,7 @@ int FakeSSLClientSocket::DoConnect() {
void FakeSSLClientSocket::OnConnectDone(int status) {
DCHECK_NE(status, net::ERR_IO_PENDING);
DCHECK_LE(status, net::OK);
- DCHECK(user_connect_callback_);
+ DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null());
if (status != net::OK) {
RunUserConnectCallback(status);
return;
@@ -219,7 +243,7 @@ int FakeSSLClientSocket::DoSendClientHello() {
void FakeSSLClientSocket::OnSendClientHelloDone(int status) {
DCHECK_NE(status, net::ERR_IO_PENDING);
- DCHECK(user_connect_callback_);
+ DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null());
if (status < net::OK) {
RunUserConnectCallback(status);
return;
@@ -252,7 +276,7 @@ int FakeSSLClientSocket::DoVerifyServerHello() {
void FakeSSLClientSocket::OnVerifyServerHelloDone(int status) {
DCHECK_NE(status, net::ERR_IO_PENDING);
- DCHECK(user_connect_callback_);
+ DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null());
if (status < net::OK) {
RunUserConnectCallback(status);
return;
@@ -295,7 +319,8 @@ void FakeSSLClientSocket::Disconnect() {
transport_socket_->Disconnect();
next_handshake_state_ = STATE_NONE;
handshake_completed_ = false;
- user_connect_callback_ = NULL;
+ old_user_connect_callback_ = NULL;
+ user_connect_callback_.Reset();
write_buf_->SetOffset(0);
read_buf_->SetOffset(0);
}
« no previous file with comments | « jingle/notifier/base/fake_ssl_client_socket.h ('k') | jingle/notifier/base/fake_ssl_client_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698