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

Unified Diff: extensions/browser/api/cast_channel/cast_channel_api.cc

Issue 417403002: Remove weak pointers from CastSocket. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clarify deletion policies. Created 6 years, 4 months 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: 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();

Powered by Google App Engine
This is Rietveld 408576698