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

Unified Diff: components/cast_channel/cast_socket.cc

Issue 2942993003: [cast_channel] Make CastMessageHandler a CastSocket::Observer instead of CastTransport::Delegate (Closed)
Patch Set: Created 3 years, 6 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: 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

Powered by Google App Engine
This is Rietveld 408576698