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

Unified Diff: chrome/browser/media/router/mojo/media_router_mojo_impl.cc

Issue 2111303003: [Media Router] Replace route messaging API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 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: chrome/browser/media/router/mojo/media_router_mojo_impl.cc
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
index 33189f86ba8b6306e57d5c29e0165fc3c867e5c9..49718c8bbc7e6e1195545ad88cd622d5586f1501 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
+++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
@@ -598,8 +598,11 @@ void MediaRouterMojoImpl::RegisterPresentationSessionMessagesObserver(
bool should_listen = !observer_list->might_have_observers();
observer_list->AddObserver(observer);
if (should_listen) {
- RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoListenForRouteMessages,
- base::Unretained(this), route_id));
+ SetWakeReason(
+ MediaRouteProviderWakeReason::START_LISTENING_FOR_ROUTE_MESSAGES);
+ RunOrDefer(
+ base::Bind(&MediaRouterMojoImpl::DoStartListeningForRouteMessages,
+ base::Unretained(this), route_id));
}
}
@@ -712,24 +715,15 @@ void MediaRouterMojoImpl::DoSendSessionBinaryMessage(
callback);
}
-void MediaRouterMojoImpl::DoListenForRouteMessages(
+void MediaRouterMojoImpl::DoStartListeningForRouteMessages(
const MediaRoute::Id& route_id) {
- DVLOG_WITH_INSTANCE(1) << "ListenForRouteMessages";
- if (!ContainsValue(route_ids_listening_for_messages_, route_id)) {
- route_ids_listening_for_messages_.insert(route_id);
- media_route_provider_->ListenForRouteMessages(
- route_id, base::Bind(&MediaRouterMojoImpl::OnRouteMessagesReceived,
- base::Unretained(this), route_id));
- }
+ DVLOG_WITH_INSTANCE(1) << "DoStartListeningForRouteMessages";
+ media_route_provider_->StartListeningForRouteMessages(route_id);
}
void MediaRouterMojoImpl::DoStopListeningForRouteMessages(
const MediaRoute::Id& route_id) {
DVLOG_WITH_INSTANCE(1) << "StopListeningForRouteMessages";
-
- // No need to erase |route_ids_listening_for_messages_| entry here.
- // It will be removed when there are no more observers by the time
- // |OnRouteMessagesReceived| is invoked.
media_route_provider_->StopListeningForRouteMessages(route_id);
}
@@ -749,49 +743,29 @@ void MediaRouterMojoImpl::DoSearchSinks(
}
void MediaRouterMojoImpl::OnRouteMessagesReceived(
- const MediaRoute::Id& route_id,
- mojo::Array<interfaces::RouteMessagePtr> messages,
- bool error) {
- DVLOG(1) << "OnRouteMessagesReceived";
-
- // If |messages| is null, then no more messages will come from this route.
- // We can stop listening.
- if (error) {
- DVLOG(2) << "Encountered error in OnRouteMessagesReceived for " << route_id;
- route_ids_listening_for_messages_.erase(route_id);
- return;
- }
+ const mojo::String& route_id,
+ mojo::Array<interfaces::RouteMessagePtr> messages) {
+ DVLOG_WITH_INSTANCE(1) << "OnRouteMessagesReceived";
+
+ DCHECK(!messages.storage().empty());
- // Check if there are any observers remaining. If not, the messages
- // can be discarded and we can stop listening for the next batch of messages.
auto* observer_list = messages_observers_.get(route_id);
if (!observer_list) {
- route_ids_listening_for_messages_.erase(route_id);
return;
}
- // If |messages| is empty, then |StopListeningForRouteMessages| was invoked
- // but we have added back an observer since. Keep listening for more messages,
- // but do not notify observers with empty list.
- if (!messages.storage().empty()) {
- ScopedVector<content::PresentationSessionMessage> session_messages;
- session_messages.reserve(messages.size());
- for (size_t i = 0; i < messages.size(); ++i) {
- session_messages.push_back(
- ConvertToPresentationSessionMessage(std::move(messages[i])));
- }
- base::ObserverList<PresentationSessionMessagesObserver>::Iterator
- observer_it(observer_list);
- bool single_observer =
- observer_it.GetNext() != nullptr && observer_it.GetNext() == nullptr;
- FOR_EACH_OBSERVER(PresentationSessionMessagesObserver, *observer_list,
- OnMessagesReceived(session_messages, single_observer));
+ ScopedVector<content::PresentationSessionMessage> session_messages;
+ session_messages.reserve(messages.size());
+ for (size_t i = 0; i < messages.size(); ++i) {
+ session_messages.push_back(
+ ConvertToPresentationSessionMessage(std::move(messages[i])));
}
-
- // Listen for more messages.
- media_route_provider_->ListenForRouteMessages(
- route_id, base::Bind(&MediaRouterMojoImpl::OnRouteMessagesReceived,
- base::Unretained(this), route_id));
+ base::ObserverList<PresentationSessionMessagesObserver>::Iterator observer_it(
+ observer_list);
+ bool single_observer =
+ observer_it.GetNext() != nullptr && observer_it.GetNext() == nullptr;
+ FOR_EACH_OBSERVER(PresentationSessionMessagesObserver, *observer_list,
+ OnMessagesReceived(session_messages, single_observer));
}
void MediaRouterMojoImpl::OnSinkAvailabilityUpdated(

Powered by Google App Engine
This is Rietveld 408576698