Chromium Code Reviews| Index: chrome/browser/ui/webui/media_router/media_router_ui.cc |
| diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.cc b/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| index e4e1e70aaf6b9031e8bcef90eead8b23b7dfdf6a..42af3f2bb683a694fd5fc3f332ae77f5e571206e 100644 |
| --- a/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| +++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| @@ -6,6 +6,7 @@ |
| #include <algorithm> |
| #include <string> |
| +#include <unordered_map> |
| #include <utility> |
| #include "base/guid.h" |
| @@ -285,13 +286,13 @@ void MediaRouterUI::InitCommon(content::WebContents* initiator) { |
| // Desktop mirror mode is always available. |
| query_result_manager_->StartSinksQuery(MediaCastMode::DESKTOP_MIRROR, |
| - MediaSourceForDesktop(), origin); |
| + {MediaSourceForDesktop()}, origin); |
| initiator_ = initiator; |
| SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator); |
| if (tab_id != -1) { |
| MediaSource mirroring_source(MediaSourceForTab(tab_id)); |
| query_result_manager_->StartSinksQuery(MediaCastMode::TAB_MIRROR, |
| - mirroring_source, origin); |
| + {mirroring_source}, origin); |
| } |
| UpdateCastModes(); |
| } |
| @@ -314,14 +315,15 @@ void MediaRouterUI::InitForTest( |
| void MediaRouterUI::OnDefaultPresentationChanged( |
| const PresentationRequest& presentation_request) { |
| - MediaSource source = presentation_request.GetMediaSource(); |
| + std::vector<MediaSource> sources = presentation_request.GetMediaSources(); |
| presentation_request_.reset(new PresentationRequest(presentation_request)); |
| query_result_manager_->StartSinksQuery( |
| - MediaCastMode::DEFAULT, source, |
| + MediaCastMode::DEFAULT, sources, |
| presentation_request_->frame_url().GetOrigin()); |
| // Register for MediaRoute updates. |
| + // TODO(crbug.com/627655): Use multiple URLs. |
|
mark a. foltz
2016/08/31 05:18:55
Sigh, this is not straightforward. The MediaRoute
takumif
2016/09/01 21:09:25
Yeah, I wasn't sure what to do here.
|
| routes_observer_.reset(new UIMediaRoutesObserver( |
| - router_, source.id(), |
| + router_, sources[0].id(), |
| base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); |
| UpdateCastModes(); |
| @@ -397,10 +399,11 @@ bool MediaRouterUI::SetRouteParameters( |
| // called. However, since the user does not have visibility into the |
| // MediaSource, and that it occurs very rarely in practice, we leave it as-is |
| // for now. |
| - MediaSource source = query_result_manager_->GetSourceForCastMode(cast_mode); |
| + MediaSource source = |
| + query_result_manager_->GetSourceForCastModeAndSink(cast_mode, sink_id); |
| if (source.Empty()) { |
| LOG(ERROR) << "No corresponding MediaSource for cast mode " |
| - << static_cast<int>(cast_mode); |
| + << static_cast<int>(cast_mode) << " and sink " << sink_id; |
| return false; |
| } |
| *source_id = source.id(); |
| @@ -491,7 +494,8 @@ void MediaRouterUI::SearchSinksAndCreateRoute( |
| const std::string& search_criteria, |
| const std::string& domain, |
| MediaCastMode cast_mode) { |
| - auto source_id = query_result_manager_->GetSourceForCastMode(cast_mode).id(); |
| + auto source_id = query_result_manager_-> |
| + GetSourceForCastModeAndSink(cast_mode, sink_id).id(); |
| // The CreateRoute() part of the function is accomplished in the callback |
| // OnSearchSinkResponseReceived(). |
| router_->SearchSinks( |
| @@ -542,9 +546,10 @@ void MediaRouterUI::OnRoutesUpdated( |
| std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map; |
| for (const auto& cast_mode : cast_modes_) { |
| - available_source_map.insert(std::make_pair( |
| - query_result_manager_->GetSourceForCastMode(cast_mode).id(), |
| - cast_mode)); |
| + for (const auto& source : |
| + query_result_manager_->GetSourcesForCastMode(cast_mode)) { |
| + available_source_map.insert(std::make_pair(source.id(), cast_mode)); |
| + } |
| } |
| current_cast_modes_.clear(); |