Chromium Code Reviews| Index: chrome/browser/media/cast_remoting_connector.cc |
| diff --git a/chrome/browser/media/cast_remoting_connector.cc b/chrome/browser/media/cast_remoting_connector.cc |
| index b419c46ca9a9b0f2ce4d1d8356d1ecc58357bc38..6babb0708d1befb36f6a362701b1ac551e69a813 100644 |
| --- a/chrome/browser/media/cast_remoting_connector.cc |
| +++ b/chrome/browser/media/cast_remoting_connector.cc |
| @@ -18,7 +18,6 @@ |
| #include "chrome/browser/sessions/session_tab_helper.h" |
| #include "chrome/common/chrome_features.h" |
| #include "chrome/common/media_router/media_source_helper.h" |
| -#include "chrome/common/media_router/route_message.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| @@ -123,7 +122,8 @@ class CastRemotingConnector::MessageObserver |
| private: |
| void OnMessagesReceived( |
| - const std::vector<media_router::RouteMessage>& messages) final { |
| + const std::vector<content::PresentationConnectionMessage>& messages) |
| + final { |
| connector_->ProcessMessagesFromRoute(messages); |
| } |
| @@ -365,92 +365,79 @@ void CastRemotingConnector::SendMessageToProvider(const std::string& message) { |
| } |
| void CastRemotingConnector::ProcessMessagesFromRoute( |
| - const std::vector<media_router::RouteMessage>& messages) { |
| + const std::vector<content::PresentationConnectionMessage>& messages) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| // Note: If any calls to message parsing functions are added/changed here, |
| // please update cast_remoting_connector_fuzzertest.cc as well! |
| - for (const media_router::RouteMessage& message : messages) { |
| - switch (message.type) { |
| - case media_router::RouteMessage::TEXT: |
| - // This is a notification message from the Cast Provider, about the |
| - // execution state of the media remoting session between Chrome and the |
| - // remote device. |
| - DCHECK(message.text); |
| - |
| - // If this is a "start streams" acknowledgement message, the |
| - // CastRemotingSenders should now be available to begin consuming from |
| - // the data pipes. |
| - if (active_bridge_ && |
| - Messaging::IsMessageForSession( |
| - *message.text, |
| - Messaging::kStartedStreamsMessageFormatPartial, |
| - session_counter_)) { |
| - if (pending_audio_sender_request_.is_pending()) { |
| - cast::CastRemotingSender::FindAndBind( |
| - Messaging::GetStreamIdFromStartedMessage( |
| - *message.text, |
| - Messaging::kStartedStreamsMessageAudioIdSpecifier), |
| - std::move(pending_audio_pipe_), |
| - std::move(pending_audio_sender_request_), |
| - base::Bind(&CastRemotingConnector::OnDataSendFailed, |
| - weak_factory_.GetWeakPtr())); |
| - } |
| - if (pending_video_sender_request_.is_pending()) { |
| - cast::CastRemotingSender::FindAndBind( |
| - Messaging::GetStreamIdFromStartedMessage( |
| - *message.text, |
| - Messaging::kStartedStreamsMessageVideoIdSpecifier), |
| - std::move(pending_video_pipe_), |
| - std::move(pending_video_sender_request_), |
| - base::Bind(&CastRemotingConnector::OnDataSendFailed, |
| - weak_factory_.GetWeakPtr())); |
| - } |
| - break; |
| - } |
| - |
| - // If this is a failure message, call StopRemoting(). |
| - if (active_bridge_ && |
| - Messaging::IsMessageForSession(*message.text, |
| - Messaging::kFailedMessageFormat, |
| - session_counter_)) { |
| - StopRemoting(active_bridge_, RemotingStopReason::UNEXPECTED_FAILURE); |
| - break; |
| - } |
| - |
| - // If this is a stop acknowledgement message, indicating that the last |
| - // session was stopped, notify all sources that the sink is once again |
| - // available. |
| - if (Messaging::IsMessageForSession(*message.text, |
| - Messaging::kStoppedMessageFormat, |
| - session_counter_)) { |
| - if (active_bridge_) { |
| - // Hmm...The Cast Provider was in a state that disagrees with this |
| - // connector. Attempt to resolve this by shutting everything down to |
| - // effectively reset to a known state. |
| - LOG(WARNING) << "BUG: Cast Provider sent 'stopped' message during " |
| - "an active remoting session."; |
| - StopRemoting(active_bridge_, |
| - RemotingStopReason::UNEXPECTED_FAILURE); |
| - } |
| - for (RemotingBridge* notifyee : bridges_) |
| - notifyee->OnSinkAvailable(enabled_features_); |
| - break; |
| - } |
| - |
| - LOG(WARNING) << "BUG: Unexpected message from Cast Provider: " |
| - << *message.text; |
| - break; |
| - |
| - case media_router::RouteMessage::BINARY: // This is for the source. |
| - DCHECK(message.binary); |
| - |
| - // All binary messages are passed through to the source during an active |
| - // remoting session. |
| - if (active_bridge_) |
| - active_bridge_->OnMessageFromSink(*message.binary); |
| - break; |
| + for (const auto& message : messages) { |
| + if (message.data) { |
|
mark a. foltz
2017/06/28 07:29:54
message.is_binary()
imcheng
2017/06/29 08:21:08
Done.
|
| + // All binary messages are passed through to the source during an active |
| + // remoting session. |
| + if (active_bridge_) |
| + active_bridge_->OnMessageFromSink(*message.data); |
| + |
| + continue; |
| + } |
| + |
| + DCHECK(message.message); |
|
mark a. foltz
2017/06/28 07:29:53
If is_binary && !active_bridge_ then this DCHECK w
imcheng
2017/06/29 08:21:08
If is_binary is true then we won't reach here due
|
| + // This is a notification message from the Cast Provider, about the |
| + // execution state of the media remoting session between Chrome and the |
| + // remote device. |
| + |
| + // If this is a "start streams" acknowledgement message, the |
| + // CastRemotingSenders should now be available to begin consuming from |
| + // the data pipes. |
| + if (active_bridge_ && |
|
mark a. foltz
2017/06/28 07:29:54
This might be easier to follow if there was an ear
imcheng
2017/06/29 08:21:08
That might be a bit challenging to extract since t
|
| + Messaging::IsMessageForSession( |
| + *message.message, Messaging::kStartedStreamsMessageFormatPartial, |
| + session_counter_)) { |
| + if (pending_audio_sender_request_.is_pending()) { |
| + cast::CastRemotingSender::FindAndBind( |
| + Messaging::GetStreamIdFromStartedMessage( |
| + *message.message, |
| + Messaging::kStartedStreamsMessageAudioIdSpecifier), |
| + std::move(pending_audio_pipe_), |
| + std::move(pending_audio_sender_request_), |
| + base::Bind(&CastRemotingConnector::OnDataSendFailed, |
| + weak_factory_.GetWeakPtr())); |
| + } |
| + if (pending_video_sender_request_.is_pending()) { |
| + cast::CastRemotingSender::FindAndBind( |
| + Messaging::GetStreamIdFromStartedMessage( |
| + *message.message, |
| + Messaging::kStartedStreamsMessageVideoIdSpecifier), |
| + std::move(pending_video_pipe_), |
| + std::move(pending_video_sender_request_), |
| + base::Bind(&CastRemotingConnector::OnDataSendFailed, |
| + weak_factory_.GetWeakPtr())); |
| + } |
| + } else if (active_bridge_ && |
| + Messaging::IsMessageForSession(*message.message, |
| + Messaging::kFailedMessageFormat, |
| + session_counter_)) { |
| + // If this is a failure message, call StopRemoting(). |
| + StopRemoting(active_bridge_, RemotingStopReason::UNEXPECTED_FAILURE); |
| + } else if (Messaging::IsMessageForSession(*message.message, |
| + Messaging::kStoppedMessageFormat, |
| + session_counter_)) { |
| + // If this is a stop acknowledgement message, indicating that the last |
| + // session was stopped, notify all sources that the sink is once again |
| + // available. |
| + if (active_bridge_) { |
| + // Hmm...The Cast Provider was in a state that disagrees with this |
| + // connector. Attempt to resolve this by shutting everything down to |
| + // effectively reset to a known state. |
| + LOG(WARNING) << "BUG: Cast Provider sent 'stopped' message during " |
| + "an active remoting session."; |
| + StopRemoting(active_bridge_, RemotingStopReason::UNEXPECTED_FAILURE); |
| + } |
| + for (RemotingBridge* notifyee : bridges_) |
| + notifyee->OnSinkAvailable(enabled_features_); |
| + } else { |
| + LOG(WARNING) << "BUG: Unexpected message from Cast Provider: " |
| + << *message.message; |
| } |
| } |
| } |