Index: remoting/protocol/pepper_transport_socket_adapter.cc |
diff --git a/remoting/protocol/pepper_transport_socket_adapter.cc b/remoting/protocol/pepper_transport_socket_adapter.cc |
index 6acb8e3007b0b33811b1a43d24e2ed5a17a2988f..36a170e2b5a6b085a5843e5d7d1384f71a2de754 100644 |
--- a/remoting/protocol/pepper_transport_socket_adapter.cc |
+++ b/remoting/protocol/pepper_transport_socket_adapter.cc |
@@ -129,6 +129,29 @@ int PepperTransportSocketAdapter::Connect(net::OldCompletionCallback* callback) |
if (!transport_.get()) |
return net::ERR_UNEXPECTED; |
+ old_connect_callback_ = callback; |
+ |
+ // This will return false when GetNextAddress() returns an |
+ // error. This helps to detect when the P2P Transport API is not |
+ // supported. |
+ int result = ProcessCandidates(); |
+ if (result != net::OK) |
+ return result; |
+ |
+ result = transport_->Connect( |
+ callback_factory_.NewRequiredCallback( |
+ &PepperTransportSocketAdapter::OnConnect)); |
+ DCHECK_EQ(result, PP_OK_COMPLETIONPENDING); |
+ |
+ return net::ERR_IO_PENDING; |
+} |
+int PepperTransportSocketAdapter::Connect( |
+ const net::CompletionCallback& callback) { |
+ DCHECK(CalledOnValidThread()); |
+ |
+ if (!transport_.get()) |
+ return net::ERR_UNEXPECTED; |
+ |
connect_callback_ = callback; |
// This will return false when GetNextAddress() returns an |
@@ -254,14 +277,20 @@ void PepperTransportSocketAdapter::OnNextAddress(int32_t result) { |
void PepperTransportSocketAdapter::OnConnect(int result) { |
DCHECK(CalledOnValidThread()); |
- DCHECK(connect_callback_); |
+ DCHECK(old_connect_callback_ || !connect_callback_.is_null()); |
if (result == PP_OK) |
connected_ = true; |
- net::OldCompletionCallback* callback = connect_callback_; |
- connect_callback_ = NULL; |
- callback->Run(PPErrorToNetError(result)); |
+ if (old_connect_callback_) { |
+ net::OldCompletionCallback* callback = old_connect_callback_; |
+ old_connect_callback_ = NULL; |
+ callback->Run(PPErrorToNetError(result)); |
+ } else { |
+ net::CompletionCallback callback = connect_callback_; |
+ connect_callback_.Reset(); |
+ callback.Run(PPErrorToNetError(result)); |
+ } |
} |
void PepperTransportSocketAdapter::OnRead(int32_t result) { |