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 4355e0e418463847d6305a24e9cb592eff2b41a9..fe16cf2f3e5992eaafb55b614ed1375b7097da1a 100644 |
--- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
+++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
@@ -346,12 +346,18 @@ void CastChannelOpenFunction::AsyncWorkStart() { |
void CastChannelOpenFunction::OnOpen(cast_channel::ChannelError result) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
VLOG(1) << "Connect finished, OnOpen invoked."; |
- CastSocket* socket = GetSocket(new_channel_id_); |
- if (!socket) { |
- SetResultFromError(new_channel_id_, result); |
- } else { |
+ // TODO: If we failed to open the CastSocket, we may want to clean up here, |
+ // rather than relying on the extension to call close(). This can be done by |
+ // calling RemoveSocket() and api_->GetLogger()->ClearLastErrors(channel_id). |
+ if (result != cast_channel::CHANNEL_ERROR_UNKNOWN) { |
+ CastSocket* socket = GetSocket(new_channel_id_); |
+ CHECK(socket); |
SetResultFromSocket(*socket); |
+ } else { |
+ // The socket is being destroyed. |
+ SetResultFromError(new_channel_id_, result); |
} |
+ |
AsyncWorkCompleted(); |
} |