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..1f017b0ded2e001fed2fc89014b4bbbaa55476ec 100644 |
--- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
+++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
@@ -65,7 +65,7 @@ void FillChannelInfo(const CastSocket& socket, ChannelInfo* channel_info) { |
bool IsValidConnectInfoPort(const ConnectInfo& connect_info) { |
return connect_info.port > 0 && connect_info.port < |
- std::numeric_limits<unsigned short>::max(); |
+ std::numeric_limits<uint16>::max(); |
Wez
2014/08/04 21:32:32
unit16_t
mark a. foltz
2014/08/04 22:20:43
Done.
|
} |
bool IsValidConnectInfoAuth(const ConnectInfo& connect_info) { |
@@ -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) { |
+ 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,14 @@ 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); |
+ // This will delete the socket. Must not use |socket| from here forward. |
Wez
2014/08/04 21:32:32
Consider NULLing |socket| so things will blow up i
mark a. foltz
2014/08/04 22:20:43
Done.
|
RemoveSocket(channel_id); |
} |
AsyncWorkCompleted(); |