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 4d05a519aebd76df1736f5ceaba1458dc1516142..a7f4e0c697fa011613be822db8bf44da177271b3 100644 |
| --- a/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| +++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| @@ -90,17 +90,19 @@ class MediaRouterUI::UIIssuesObserver : public IssuesObserver { |
| }; |
| MediaRouterUI::UIMediaRoutesObserver::UIMediaRoutesObserver( |
| - MediaRouter* router, |
| + MediaRouter* router, const MediaSource::Id source_id, |
|
imcheng
2015/11/26 00:49:46
const MediaSource::Id&
matt.boetger
2015/12/01 01:26:56
Done.
|
| const RoutesUpdatedCallback& callback) |
| - : MediaRoutesObserver(router), callback_(callback) { |
| + : MediaRoutesObserver(router, source_id), callback_(callback) { |
| DCHECK(!callback_.is_null()); |
| } |
| MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {} |
| void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( |
| - const std::vector<MediaRoute>& routes) { |
| + const std::vector<MediaRoute>& routes, |
| + const std::vector<MediaRoute::Id>& joinable_route_ids) { |
| std::vector<MediaRoute> routes_for_display; |
| + std::vector<MediaRoute::Id> joinable_route_ids_for_display; |
| for (const MediaRoute& route : routes) { |
| if (route.for_display()) { |
| #ifndef NDEBUG |
| @@ -113,11 +115,17 @@ void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( |
| } |
| } |
| #endif |
| + if (std::find(joinable_route_ids.begin(), |
| + joinable_route_ids.end(), route.media_route_id()) != |
| + joinable_route_ids.end()) { |
| + joinable_route_ids_for_display.push_back(route.media_route_id()); |
| + } |
| + |
| routes_for_display.push_back(route); |
| } |
| } |
| - callback_.Run(routes_for_display); |
| + callback_.Run(routes_for_display, joinable_route_ids_for_display); |
| } |
| MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) |
| @@ -209,7 +217,7 @@ void MediaRouterUI::InitCommon(content::WebContents* initiator, |
| // Register for MediaRoute updates. |
| routes_observer_.reset(new UIMediaRoutesObserver( |
| - router_, |
| + router_, default_source.id(), |
| base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); |
| query_result_manager_.reset(new QueryResultManager(router_)); |
| @@ -334,6 +342,44 @@ bool MediaRouterUI::CreateRoute(const MediaSink::Id& sink_id, |
| return true; |
| } |
| +bool MediaRouterUI::JoinRoute(const MediaSink::Id& sink_id, |
| + const MediaRoute::Id& route_id) { |
| + DCHECK(query_result_manager_.get()); |
| + DCHECK(initiator_); |
| + |
| + current_route_request_id_ = ++route_request_counter_; |
| + GURL origin = frame_url_.GetOrigin(); |
| + |
| + MediaSource source = |
| + query_result_manager_->GetSourceForCastMode(MediaCastMode::DEFAULT); |
| + |
| + if (source.Empty()) { |
| + LOG(ERROR) << "No MediaSource to join"; |
| + return false; |
| + } |
| + |
| + DCHECK(origin.is_valid()); |
| + |
| + std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| + route_response_callbacks.push_back(base::Bind( |
| + &MediaRouterUI::OnRouteResponseReceived, weak_factory_.GetWeakPtr(), |
| + current_route_request_id_, sink_id)); |
| + |
| + if (presentation_service_delegate_) { |
| + route_response_callbacks.push_back( |
| + base::Bind(&PresentationServiceDelegateImpl::OnRouteResponse, |
| + presentation_service_delegate_)); |
| + } |
| + |
| + // Start the timer. |
| + route_creation_timer_.Start( |
| + FROM_HERE, base::TimeDelta::FromSeconds(kCreateRouteTimeoutSeconds), this, |
| + &MediaRouterUI::RouteCreationTimeout); |
| + router_->JoinRouteByRouteId(source.id(), route_id, origin, |
| + initiator_, route_response_callbacks); |
| + return true; |
| +} |
| + |
| void MediaRouterUI::CloseRoute(const MediaRoute::Id& route_id) { |
| router_->CloseRoute(route_id); |
| } |
| @@ -358,10 +404,13 @@ void MediaRouterUI::SetIssue(const Issue* issue) { |
| handler_->UpdateIssue(issue); |
| } |
| -void MediaRouterUI::OnRoutesUpdated(const std::vector<MediaRoute>& routes) { |
| +void MediaRouterUI::OnRoutesUpdated( |
| + const std::vector<MediaRoute>& routes, |
| + const std::vector<MediaRoute::Id>& joinable_route_ids) { |
| routes_ = routes; |
| + joinable_route_ids_ = joinable_route_ids; |
| if (ui_initialized_) |
| - handler_->UpdateRoutes(routes_); |
| + handler_->UpdateRoutes(routes_, joinable_route_ids_); |
| } |
| void MediaRouterUI::OnRouteResponseReceived(const int route_request_id, |