Chromium Code Reviews| Index: extensions/browser/api/cast_channel/cast_channel_api.cc |
| diff --git a/extensions/browser/api/cast_channel/cast_channel_api.cc b/extensions/browser/api/cast_channel/cast_channel_api.cc |
| index 8878a0c5c26fd3a439aad1ab2d5531530902e3c2..c5bc286f3df6a9e511309925624f68082acdb41b 100644 |
| --- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
| +++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
| @@ -162,7 +162,8 @@ CastSocket* CastChannelAsyncApiFunction::GetSocketOrCompleteWithError( |
| int channel_id) { |
| CastSocket* socket = GetSocket(channel_id); |
| if (!socket) { |
| - SetResultFromError(cast_channel::CHANNEL_ERROR_INVALID_CHANNEL_ID); |
| + SetResultFromError(channel_id, |
| + cast_channel::CHANNEL_ERROR_INVALID_CHANNEL_ID); |
| AsyncWorkCompleted(); |
| } |
| return socket; |
| @@ -183,21 +184,24 @@ void CastChannelAsyncApiFunction::RemoveSocket(int channel_id) { |
| manager_->Remove(extension_->id(), channel_id); |
| } |
| -void CastChannelAsyncApiFunction::SetResultFromSocket(int channel_id) { |
| - CastSocket* socket = GetSocket(channel_id); |
| - DCHECK(socket); |
| +void CastChannelAsyncApiFunction::SetResultFromSocket( |
| + const CastSocket& socket) { |
| ChannelInfo channel_info; |
| - FillChannelInfo(*socket, &channel_info); |
| - error_ = socket->error_state(); |
| + FillChannelInfo(socket, &channel_info); |
| + error_ = socket.error_state(); |
| SetResultFromChannelInfo(channel_info); |
| } |
| -void CastChannelAsyncApiFunction::SetResultFromError(ChannelError error) { |
| +void CastChannelAsyncApiFunction::SetResultFromError(int channel_id, |
| + ChannelError error) { |
| ChannelInfo channel_info; |
| - channel_info.channel_id = -1; |
| + channel_info.channel_id = channel_id; |
| channel_info.url = ""; |
| channel_info.ready_state = cast_channel::READY_STATE_CLOSED; |
| channel_info.error_state = error; |
| + channel_info.connect_info.ip_address = ""; |
| + channel_info.connect_info.port = 0; |
| + channel_info.connect_info.auth = cast_channel::CHANNEL_AUTH_TYPE_SSL; |
| SetResultFromChannelInfo(channel_info); |
| error_ = error; |
| } |
| @@ -338,7 +342,13 @@ void CastChannelOpenFunction::AsyncWorkStart() { |
| void CastChannelOpenFunction::OnOpen(int result) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| VLOG(1) << "Connect finished, OnOpen invoked."; |
| - SetResultFromSocket(new_channel_id_); |
| + CastSocket* socket = GetSocket(new_channel_id_); |
| + if (!socket) { |
|
Wez
2014/07/31 22:57:53
Is there a simple test we can add to verify that t
mark a. foltz
2014/08/01 23:21:48
I tried writing an API test for this case but it i
|
| + SetResultFromError(new_channel_id_, |
| + cast_channel::CHANNEL_ERROR_CONNECT_ERROR); |
| + } else { |
| + SetResultFromSocket(*socket); |
| + } |
| AsyncWorkCompleted(); |
| } |
| @@ -382,10 +392,13 @@ void CastChannelSendFunction::AsyncWorkStart() { |
| void CastChannelSendFunction::OnSend(int result) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| - if (result < 0) { |
| - SetResultFromError(cast_channel::CHANNEL_ERROR_SOCKET_ERROR); |
| + int channel_id = params_->channel.channel_id; |
| + CastSocket* socket = GetSocket(channel_id); |
| + if (result < 0 || !socket) { |
| + SetResultFromError(channel_id, |
| + cast_channel::CHANNEL_ERROR_SOCKET_ERROR); |
| } else { |
| - SetResultFromSocket(params_->channel.channel_id); |
| + SetResultFromSocket(*socket); |
| } |
| AsyncWorkCompleted(); |
| } |
| @@ -410,11 +423,13 @@ void CastChannelCloseFunction::AsyncWorkStart() { |
| void CastChannelCloseFunction::OnClose(int result) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| VLOG(1) << "CastChannelCloseFunction::OnClose result = " << result; |
| - if (result < 0) { |
| - SetResultFromError(cast_channel::CHANNEL_ERROR_SOCKET_ERROR); |
| + int channel_id = params_->channel.channel_id; |
| + CastSocket* socket = GetSocket(channel_id); |
| + if (result < 0 || !socket) { |
| + SetResultFromError(channel_id, |
| + cast_channel::CHANNEL_ERROR_SOCKET_ERROR); |
| } else { |
| - int channel_id = params_->channel.channel_id; |
| - SetResultFromSocket(channel_id); |
| + SetResultFromSocket(*socket); |
| RemoveSocket(channel_id); |
| } |
| AsyncWorkCompleted(); |