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

Unified Diff: chrome/browser/ui/webui/media_router/media_router_ui.cc

Issue 1415103006: Non-Local Join for Media Router and Presentation API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added Unit Tests Created 5 years, 1 month 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/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..798f7f0788be3d9d23f2a969e98e7503875324af 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,23 @@ class MediaRouterUI::UIIssuesObserver : public IssuesObserver {
};
MediaRouterUI::UIMediaRoutesObserver::UIMediaRoutesObserver(
- MediaRouter* router,
+ MediaRouter* router, const MediaSource::Id source_id,
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 MediaSource::Id source_id,
+ const std::vector<MediaRoute>& routes,
+ const std::vector<MediaRoute>& joinable_routes) {
+ if (source_id.compare(this->source_id()) != 0)
+ return;
+
std::vector<MediaRoute> routes_for_display;
+ std::vector<MediaRoute> joinable_routes_for_display;
for (const MediaRoute& route : routes) {
if (route.for_display()) {
#ifndef NDEBUG
@@ -116,8 +122,23 @@ void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated(
routes_for_display.push_back(route);
}
}
+ for (const MediaRoute& route: joinable_routes) {
+ if (route.for_display()) {
+#ifndef NDEBUG
+ for (const MediaRoute& existing_route : joinable_routes_for_display) {
+ if (existing_route.media_sink_id() == route.media_sink_id()) {
+ DVLOG(2) << "Received another route for display with the same sink"
+ << " id as an existing route. "
+ << route.media_route_id() << " has the same sink id as "
+ << existing_route.media_sink_id() << ".";
+ }
+ }
+#endif
+ joinable_routes_for_display.push_back(route);
+ }
+ }
- callback_.Run(routes_for_display);
+ callback_.Run(routes_for_display, joinable_routes_for_display);
}
MediaRouterUI::MediaRouterUI(content::WebUI* web_ui)
@@ -209,7 +230,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 +355,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 +417,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>& joinable_routes) {
routes_ = routes;
+ joinable_routes_ = joinable_routes;
if (ui_initialized_)
- handler_->UpdateRoutes(routes_);
+ handler_->UpdateRoutes(routes_, joinable_routes_);
}
void MediaRouterUI::OnRouteResponseReceived(const int route_request_id,

Powered by Google App Engine
This is Rietveld 408576698