| Index: components/cast_channel/cast_socket.cc
|
| diff --git a/components/cast_channel/cast_socket.cc b/components/cast_channel/cast_socket.cc
|
| index e60004ed228f1e5c1a2f6ce9ebd0e2150cc12fbe..27119e18ff6adc4c2704a64ac6732855d5cde7a3 100644
|
| --- a/components/cast_channel/cast_socket.cc
|
| +++ b/components/cast_channel/cast_socket.cc
|
| @@ -240,14 +240,13 @@ void CastSocketImpl::SetTransportForTesting(
|
| transport_ = std::move(transport);
|
| }
|
|
|
| -void CastSocketImpl::Connect(std::unique_ptr<CastTransport::Delegate> delegate,
|
| - base::Callback<void(ChannelError)> callback) {
|
| +void CastSocketImpl::Connect(base::Callback<void(ChannelError)> callback) {
|
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
| VLOG_WITH_CONNECTION(1) << "Connect readyState = "
|
| << ::cast_channel::ReadyStateToString(ready_state_);
|
| DCHECK_EQ(ConnectionState::START_CONNECT, connect_state_);
|
|
|
| - delegate_ = std::move(delegate);
|
| + delegate_ = base::MakeUnique<CastSocketMessageDelegate>(this);
|
|
|
| if (ready_state_ != ReadyState::NONE) {
|
| callback.Run(ChannelError::CONNECT_ERROR);
|
| @@ -274,6 +273,16 @@ CastTransport* CastSocketImpl::transport() const {
|
| return transport_.get();
|
| }
|
|
|
| +bool CastSocketImpl::HasObserver(const std::string& id) {
|
| + return base::ContainsKey(observer_map_, id);
|
| +}
|
| +
|
| +void CastSocketImpl::AddObserver(const std::string& id,
|
| + std::unique_ptr<Observer> observer) {
|
| + DCHECK(!base::ContainsKey(observer_map_, id));
|
| + observer_map_.insert(std::make_pair(id, std::move(observer)));
|
| +}
|
| +
|
| void CastSocketImpl::OnConnectTimeout() {
|
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
|
| // Stop all pending connection setup tasks and report back to the client.
|
| @@ -569,6 +578,7 @@ void CastSocketImpl::CloseInternal() {
|
| tcp_socket_.reset();
|
| socket_.reset();
|
| transport_security_state_.reset();
|
| + observer_map_.clear();
|
| if (GetTimer()) {
|
| GetTimer()->Stop();
|
| }
|
| @@ -603,5 +613,28 @@ void CastSocketImpl::SetErrorState(ChannelError error_state) {
|
| delegate_->OnError(error_state_);
|
| }
|
|
|
| +CastSocketImpl::CastSocketMessageDelegate::CastSocketMessageDelegate(
|
| + cast_channel::CastSocketImpl* socket)
|
| + : socket_(socket) {
|
| + DCHECK(socket_);
|
| +}
|
| +
|
| +CastSocketImpl::CastSocketMessageDelegate::~CastSocketMessageDelegate() {}
|
| +
|
| +// CastTransport::Delegate implementation.
|
| +void CastSocketImpl::CastSocketMessageDelegate::OnError(
|
| + cast_channel::ChannelError error_state) {
|
| + for (auto& it : socket_->observer_map_)
|
| + it.second->OnError(*socket_, error_state);
|
| +}
|
| +
|
| +void CastSocketImpl::CastSocketMessageDelegate::OnMessage(
|
| + const cast_channel::CastMessage& message) {
|
| + for (auto& it : socket_->observer_map_)
|
| + it.second->OnMessage(*socket_, message);
|
| +}
|
| +
|
| +void CastSocketImpl::CastSocketMessageDelegate::Start() {}
|
| +
|
| } // namespace cast_channel
|
| #undef VLOG_WITH_CONNECTION
|
|
|