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 bdbea3316955c9ad8b0f6ecfab1826e53c05c2f9..a984a8c82d7807cd6a0001e47ab3ddfbc0c08262 100644 |
| --- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
| +++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
| @@ -294,14 +294,15 @@ void CastChannelOpenFunction::AsyncWorkStart() { |
| } |
| new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket)); |
| + if (!socket->HasObserver(extension_->id())) { |
|
imcheng
2017/06/16 23:39:25
Since we are thinking about sharing CastSocket acr
zhaobin
2017/06/20 00:54:36
Doing it a little differently.
1. Create one obse
|
| + socket->AddObserver(extension_->id(), |
|
mark a. foltz
2017/06/16 23:26:14
I think this code should only run once per extensi
zhaobin
2017/06/20 00:54:36
Yes.
Done.
|
| + base::MakeUnique<CastMessageHandler>( |
| + base::Bind(&CastChannelAPI::SendEvent, |
| + api_->AsWeakPtr(), extension_->id()), |
| + api_->GetLogger())); |
| + } |
| // 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 +433,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 +442,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 +463,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 +484,4 @@ void CastChannelOpenFunction::CastMessageHandler::OnMessage( |
| base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); |
| } |
| -void CastChannelOpenFunction::CastMessageHandler::Start() { |
| -} |
| - |
| } // namespace extensions |