Chromium Code Reviews| Index: chrome/browser/media/router/media_router_base.cc |
| diff --git a/chrome/browser/media/router/media_router_base.cc b/chrome/browser/media/router/media_router_base.cc |
| index 923afc4efc79b6e37ec7dc9f865c8d1f5b3f6c2b..9246b7859d22cf434ce01bb852f9723d8b943e8e 100644 |
| --- a/chrome/browser/media/router/media_router_base.cc |
| +++ b/chrome/browser/media/router/media_router_base.cc |
| @@ -27,7 +27,27 @@ class MediaRouterBase::InternalMediaRoutesObserver |
| void OnRoutesUpdated( |
| const std::vector<MediaRoute>& routes, |
| const std::vector<MediaRoute::Id>& joinable_route_ids) override { |
| + std::vector<MediaRoute> old_routes = std::move(current_routes); |
| current_routes = routes; |
| + |
| + // Restore presentation id from old route. |
| + for (auto& route : current_routes) { |
| + if (route.presentation_id().has_value()) |
| + continue; |
| + |
| + auto old_route_it = std::find_if(old_routes.begin(), old_routes.end(), |
| + [&route](const MediaRoute& old_route) { |
| + return route.media_route_id() == |
| + old_route.media_route_id(); |
| + }); |
| + |
| + if (old_route_it == old_routes.end()) |
| + continue; |
| + |
| + if (old_route_it->presentation_id().has_value()) |
| + route.set_presentation_id(old_route_it->presentation_id().value()); |
| + } |
| + |
| incognito_route_ids.clear(); |
| // TODO(crbug.com/611486): Have the MRPM pass a list of joinable route ids |
| // via |joinable_route_ids|, and check here if it is non-empty. |
| @@ -38,6 +58,30 @@ class MediaRouterBase::InternalMediaRoutesObserver |
| } |
| } |
| + const MediaRoute* GetPresentationRoute( |
| + const std::string& presentation_id) const { |
| + for (const auto& route : current_routes) { |
| + if (route.presentation_id().has_value() && |
| + route.presentation_id().value() == presentation_id) |
| + return &route; |
| + } |
| + |
| + return nullptr; |
| + } |
| + |
| + void SetPresentationId(const MediaRoute::Id& route_id, |
|
mark a. foltz
2017/03/13 17:52:11
Can the presentation ID just be set on the Route i
|
| + const std::string& presentation_id) { |
| + auto route_it = std::find_if(current_routes.begin(), current_routes.end(), |
| + [&route_id](const MediaRoute& route) { |
| + return route.media_route_id() == route_id; |
| + }); |
| + |
| + if (route_it == current_routes.end()) |
| + return; |
| + |
| + route_it->set_presentation_id(presentation_id); |
| + } |
| + |
| bool has_route; |
| std::vector<MediaRoute> current_routes; |
| std::vector<MediaRoute::Id> incognito_route_ids; |
| @@ -76,6 +120,19 @@ std::vector<MediaRoute> MediaRouterBase::GetCurrentRoutes() const { |
| return internal_routes_observer_->current_routes; |
| } |
| +const MediaRoute* MediaRouterBase::GetPresentationRoute( |
| + const std::string& presentation_id) const { |
| + DCHECK(internal_routes_observer_); |
| + return internal_routes_observer_->GetPresentationRoute(presentation_id); |
| +} |
| + |
| +void MediaRouterBase::SetPresentationId(const MediaRoute::Id& route_id, |
| + const std::string& presentation_id) { |
| + DCHECK(internal_routes_observer_); |
| + return internal_routes_observer_->SetPresentationId(route_id, |
| + presentation_id); |
| +} |
| + |
| MediaRouterBase::MediaRouterBase() : initialized_(false) {} |
| // static |