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

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

Issue 1805813002: [Media Router] Wiring for searching route providers for new sinks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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/media_router_mojo_impl.cc
diff --git a/chrome/browser/media/router/media_router_mojo_impl.cc b/chrome/browser/media/router/media_router_mojo_impl.cc
index 787dbdb50c214333bb4730b1eea55f83b2c4d415..2a0e28cb8e05378bdd1c9e1db8bc0717ff064fc7 100644
--- a/chrome/browser/media/router/media_router_mojo_impl.cc
+++ b/chrome/browser/media/router/media_router_mojo_impl.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/media/router/media_router_type_converters.h"
#include "chrome/browser/media/router/media_routes_observer.h"
#include "chrome/browser/media/router/media_sinks_observer.h"
+#include "chrome/browser/media/router/media_sinks_search_request.h"
#include "chrome/browser/media/router/presentation_session_messages_observer.h"
#include "chrome/browser/sessions/session_tab_helper.h"
#include "extensions/browser/process_manager.h"
@@ -73,6 +74,10 @@ MediaRouterMojoImpl::MediaSinksQuery::MediaSinksQuery() = default;
MediaRouterMojoImpl::MediaSinksQuery::~MediaSinksQuery() = default;
+MediaRouterMojoImpl::MediaSinksSearchQuery::MediaSinksSearchQuery() = default;
+
+MediaRouterMojoImpl::MediaSinksSearchQuery::~MediaSinksSearchQuery() = default;
+
MediaRouterMojoImpl::MediaRouterMojoImpl(
extensions::EventPageTracker* event_page_tracker)
: event_page_tracker_(event_page_tracker),
@@ -191,6 +196,27 @@ void MediaRouterMojoImpl::OnSinksReceived(
}
}
+void MediaRouterMojoImpl::OnSearchSinksReceived(
+ const mojo::String& sink_id,
+ mojo::Array<interfaces::MediaSinkPtr> sinks) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ auto it = search_queries_.find(sink_id);
+ if (it == search_queries_.end()) {
+ return;
+ }
+
+ auto& search_query = it->second;
+ std::vector<MediaSink> sink_list;
+ sink_list.reserve(sinks.size());
+ for (size_t i = 0; i < sinks.size(); ++i)
+ sink_list.push_back(sinks[i].To<MediaSink>());
+
+ for (auto& observer : search_query->observers) {
+ observer->OnResultsReceived(sink_list);
+ }
+ search_queries_.erase(it);
+}
+
void MediaRouterMojoImpl::OnRoutesUpdated(
mojo::Array<interfaces::MediaRoutePtr> routes,
const mojo::String& media_source,
@@ -441,6 +467,35 @@ void MediaRouterMojoImpl::UnregisterMediaSinksObserver(
}
}
+bool MediaRouterMojoImpl::RegisterMediaSinksSearchRequest(
+ scoped_ptr<MediaSinksSearchRequest> request) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ auto& sink_id = request->sink_id();
+ auto source = request->source().id();
+ auto it = search_queries_.find(sink_id);
+ bool new_query = false;
+ if (it == search_queries_.end()) {
+ new_query = true;
+ bool is_true;
+ auto query = make_scoped_ptr(new MediaSinksSearchQuery);
+ std::tie(it, is_true) =
+ search_queries_.insert(std::make_pair(sink_id, std::move(query)));
+ } else {
+ DCHECK(std::find(it->second->observers.begin(), it->second->observers.end(),
+ request) == it->second->observers.end());
+ }
+
+ auto& search_query = it->second;
+ search_query->observers.push_back(std::move(request));
+ if (new_query) {
+ SetWakeReason(MediaRouteProviderWakeReason::SEARCH_SINKS);
+ RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoSearchProviders,
+ base::Unretained(this), source, sink_id));
+ }
+ return true;
+}
+
void MediaRouterMojoImpl::RegisterMediaRoutesObserver(
MediaRoutesObserver* observer) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -640,6 +695,12 @@ void MediaRouterMojoImpl::DoStopListeningForRouteMessages(
media_route_provider_->StopListeningForRouteMessages(route_id);
}
+void MediaRouterMojoImpl::DoSearchProviders(const MediaSource::Id& source_id,
+ const MediaSink::Id& sink_id) {
+ DVLOG_WITH_INSTANCE(1) << "SearchProviders";
+ media_route_provider_->SearchProviders(source_id, sink_id);
+}
+
void MediaRouterMojoImpl::OnRouteMessagesReceived(
const MediaRoute::Id& route_id,
mojo::Array<interfaces::RouteMessagePtr> messages,

Powered by Google App Engine
This is Rietveld 408576698