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 bdbea3316955c9ad8b0f6ecfab1826e53c05c2f9..44844998823895d8847dae9ad8b29b703039a578 100644 |
--- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
+++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
@@ -294,14 +294,18 @@ void CastChannelOpenFunction::AsyncWorkStart() { |
} |
new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket)); |
+ auto* observer = cast_socket_service_->GetObserver(extension_->id()); |
+ if (!observer) { |
+ observer = cast_socket_service_->AddObserver( |
+ extension_->id(), base::MakeUnique<CastMessageHandler>( |
+ base::Bind(&CastChannelAPI::SendEvent, |
+ api_->AsWeakPtr(), extension_->id()), |
+ api_->GetLogger())); |
+ } |
+ |
+ socket->AddObserver(observer); |
// Construct read delegates. |
- std::unique_ptr<CastTransport::Delegate> delegate( |
- base::MakeUnique<CastMessageHandler>( |
- base::Bind(&CastChannelAPI::SendEvent, api_->AsWeakPtr(), |
- extension_->id()), |
- socket, api_->GetLogger())); |
- socket->Connect(std::move(delegate), |
- base::Bind(&CastChannelOpenFunction::OnOpen, this)); |
+ socket->Connect(base::Bind(&CastChannelOpenFunction::OnOpen, this)); |
} |
void CastChannelOpenFunction::OnOpen(ChannelError result) { |
@@ -432,10 +436,8 @@ void CastChannelCloseFunction::OnClose(int result) { |
CastChannelOpenFunction::CastMessageHandler::CastMessageHandler( |
const EventDispatchCallback& ui_dispatch_cb, |
- CastSocket* socket, |
scoped_refptr<Logger> logger) |
- : ui_dispatch_cb_(ui_dispatch_cb), socket_(socket), logger_(logger) { |
- DCHECK(socket_); |
+ : ui_dispatch_cb_(ui_dispatch_cb), logger_(logger) { |
DCHECK(logger_); |
} |
@@ -443,14 +445,15 @@ CastChannelOpenFunction::CastMessageHandler::~CastMessageHandler() { |
} |
void CastChannelOpenFunction::CastMessageHandler::OnError( |
+ const cast_channel::CastSocket& socket, |
ChannelError error_state) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
ChannelInfo channel_info; |
- FillChannelInfo(*socket_, &channel_info); |
+ FillChannelInfo(socket, &channel_info); |
channel_info.error_state = api::cast_channel::ToChannelError(error_state); |
ErrorInfo error_info; |
- FillErrorInfo(channel_info.error_state, logger_->GetLastError(socket_->id()), |
+ FillErrorInfo(channel_info.error_state, logger_->GetLastError(socket.id()), |
&error_info); |
std::unique_ptr<base::ListValue> results = |
@@ -463,13 +466,14 @@ void CastChannelOpenFunction::CastMessageHandler::OnError( |
} |
void CastChannelOpenFunction::CastMessageHandler::OnMessage( |
+ const cast_channel::CastSocket& socket, |
const CastMessage& message) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
MessageInfo message_info; |
CastMessageToMessageInfo(message, &message_info); |
ChannelInfo channel_info; |
- FillChannelInfo(*socket_, &channel_info); |
+ FillChannelInfo(socket, &channel_info); |
VLOG(1) << "Received message " << ParamToString(message_info) |
<< " on channel " << ParamToString(channel_info); |
@@ -483,7 +487,4 @@ void CastChannelOpenFunction::CastMessageHandler::OnMessage( |
base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); |
} |
-void CastChannelOpenFunction::CastMessageHandler::Start() { |
-} |
- |
} // namespace extensions |