| Index: chrome/browser/ui/webui/media_router/query_result_manager.cc
|
| diff --git a/chrome/browser/ui/webui/media_router/query_result_manager.cc b/chrome/browser/ui/webui/media_router/query_result_manager.cc
|
| index e451fdb3e4971b53f3d2d077d768c3c28eb8a1c4..bec3ef2c74c850cde022602a1b013a827555e86d 100644
|
| --- a/chrome/browser/ui/webui/media_router/query_result_manager.cc
|
| +++ b/chrome/browser/ui/webui/media_router/query_result_manager.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/stl_util.h"
|
| #include "chrome/browser/media/router/media_router.h"
|
| #include "chrome/browser/media/router/media_sinks_observer.h"
|
| +#include "chrome/browser/media/router/media_sinks_search_request.h"
|
|
|
| namespace media_router {
|
|
|
| @@ -52,6 +53,22 @@ class QueryResultManager::CastModeMediaSinksObserver
|
| QueryResultManager* result_manager_;
|
| };
|
|
|
| +class QueryResultManager::SearchSinksRequest : public MediaSinksSearchRequest {
|
| + public:
|
| + SearchSinksRequest(const MediaSource& source,
|
| + const MediaSink::Id& sink_id,
|
| + QueryResultManager* result_manager)
|
| + : MediaSinksSearchRequest(source, sink_id),
|
| + result_manager_(result_manager) {}
|
| +
|
| + void OnResultsReceived(const std::vector<MediaSink>& result) override {
|
| + result_manager_->NotifyOnSearchResults(sink_id(), result);
|
| + }
|
| +
|
| + private:
|
| + QueryResultManager* result_manager_;
|
| +};
|
| +
|
| QueryResultManager::QueryResultManager(MediaRouter* router) : router_(router) {
|
| DCHECK(router_);
|
| }
|
| @@ -102,6 +119,19 @@ void QueryResultManager::StopSinksQuery(MediaCastMode cast_mode) {
|
| NotifyOnResultsUpdated();
|
| }
|
|
|
| +void QueryResultManager::StartSinkSearch(MediaCastMode cast_mode,
|
| + const MediaSink::Id& sink_id) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + auto source = GetSourceForCastMode(cast_mode);
|
| + if (source.Empty()) {
|
| + return;
|
| + }
|
| + auto observer =
|
| + make_scoped_ptr(new SearchSinksRequest(source, sink_id, this));
|
| + router_->RegisterMediaSinksSearchRequest(std::move(observer));
|
| +}
|
| +
|
| void QueryResultManager::SetSourceForCastMode(
|
| MediaCastMode cast_mode, const MediaSource& source) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| @@ -158,11 +188,11 @@ void QueryResultManager::GetSupportedCastModes(CastModeSet* cast_modes) const {
|
| }
|
|
|
| MediaSource QueryResultManager::GetSourceForCastMode(
|
| - MediaCastMode cast_mode) const {
|
| + MediaCastMode cast_mode) const {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| auto source_it = cast_mode_sources_.find(cast_mode);
|
| - return source_it == cast_mode_sources_.end() ?
|
| - MediaSource() : source_it->second;
|
| + return source_it == cast_mode_sources_.end() ? MediaSource()
|
| + : source_it->second;
|
| }
|
|
|
| void QueryResultManager::NotifyOnResultsUpdated() {
|
| @@ -174,4 +204,18 @@ void QueryResultManager::NotifyOnResultsUpdated() {
|
| OnResultsUpdated(sinks));
|
| }
|
|
|
| +void QueryResultManager::NotifyOnSearchResults(
|
| + const MediaSink::Id& sink_id,
|
| + const std::vector<MediaSink>& sinks) {
|
| + std::vector<MediaSinkWithCastModes> sinks_with_cast_modes;
|
| + sinks_with_cast_modes.reserve(sinks.size());
|
| + for (const auto& sink : sinks) {
|
| + sinks_with_cast_modes.push_back(MediaSinkWithCastModes(sink));
|
| + sinks_with_cast_modes.back().cast_modes.insert(TAB_MIRROR);
|
| + sinks_with_cast_modes.back().cast_modes.insert(DESKTOP_MIRROR);
|
| + }
|
| + FOR_EACH_OBSERVER(QueryResultManager::Observer, observers_,
|
| + OnSearchResultsReceived(sink_id, sinks_with_cast_modes));
|
| +}
|
| +
|
| } // namespace media_router
|
|
|