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 96ff4e614d12e2bb54a17105f1d5e349c70bcb2c..b196b0875974ce330cd4376869985d89dac68f24 100644 |
| --- a/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| +++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| @@ -31,6 +31,7 @@ |
| #include "chrome/browser/ui/webui/media_router/media_router_localized_strings_provider.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" |
| +#include "chrome/common/chrome_features.h" |
| #include "chrome/common/media_router/issue.h" |
| #include "chrome/common/media_router/media_route.h" |
| #include "chrome/common/media_router/media_sink.h" |
| @@ -153,6 +154,28 @@ void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( |
| callback_.Run(routes, joinable_route_ids); |
| } |
| +MediaRouterUI::UIMediaRouteControllerObserver::UIMediaRouteControllerObserver( |
| + MediaRouterUI* ui, |
| + scoped_refptr<MediaRouteController> controller) |
| + : MediaRouteController::Observer(std::move(controller)), ui_(ui) {} |
| +MediaRouterUI::UIMediaRouteControllerObserver:: |
| + ~UIMediaRouteControllerObserver() {} |
| + |
| +void MediaRouterUI::UIMediaRouteControllerObserver::OnMediaStatusUpdated( |
| + const MediaStatus& status) { |
| + current_media_status_ = base::make_optional<MediaStatus>(MediaStatus(status)); |
| + ui_->handler_->UpdateMediaRouteStatus(status); |
| +} |
| + |
| +void MediaRouterUI::UIMediaRouteControllerObserver::OnControllerInvalidated() { |
| + ui_->OnRouteControllerInvalidated(); |
| +} |
| + |
| +const MediaStatus* |
| +MediaRouterUI::UIMediaRouteControllerObserver::GetCurrentMediaStatus() const { |
| + return current_media_status_ ? ¤t_media_status_.value() : nullptr; |
| +} |
| + |
| MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) |
| : ConstrainedWebDialogUI(web_ui), |
| ui_initialized_(false), |
| @@ -760,6 +783,58 @@ void MediaRouterUI::UpdateMaxDialogHeight(int height) { |
| handler_->UpdateMaxDialogHeight(height); |
| } |
| +void MediaRouterUI::PlayRoute() { |
| + if (route_controller_observer_) |
| + route_controller_observer_->controller()->Play(); |
| +} |
| + |
| +void MediaRouterUI::PauseRoute() { |
| + if (route_controller_observer_) |
| + route_controller_observer_->controller()->Pause(); |
| +} |
| + |
| +void MediaRouterUI::SeekRoute(base::TimeDelta time) { |
| + if (route_controller_observer_ && |
| + route_controller_observer_->GetCurrentMediaStatus() && |
| + time >= base::TimeDelta() && |
| + time <= route_controller_observer_->GetCurrentMediaStatus()->duration) { |
| + route_controller_observer_->controller()->Seek(time); |
| + } |
| +} |
| + |
| +void MediaRouterUI::SetRouteVolume(float volume) { |
| + if (route_controller_observer_ && volume >= 0 && volume <= 1) |
| + route_controller_observer_->controller()->SetVolume(volume); |
| +} |
| + |
| +void MediaRouterUI::SetRouteMute(bool mute) { |
| + if (route_controller_observer_) |
| + route_controller_observer_->controller()->SetMute(mute); |
| +} |
| + |
| +void MediaRouterUI::OnUIDetailsViewOpened(const MediaRoute::Id& route_id) { |
| + if (!IsValidRouteId(route_id)) |
| + return; |
| + route_controller_observer_ = base::MakeUnique<UIMediaRouteControllerObserver>( |
| + this, router_->GetRouteController(route_id)); |
|
mark a. foltz
2017/04/26 21:01:18
If the route is invalid, does |router_| return a n
takumif
2017/04/27 03:04:17
Right, MediaRouter would return null in that case.
|
| +} |
| + |
| +void MediaRouterUI::OnUIDetailsViewClosed() { |
| + route_controller_observer_.reset(); |
| +} |
| + |
| +bool MediaRouterUI::IsValidRouteId(const MediaRoute::Id& route_id) const { |
| + return std::find_if(routes_.begin(), routes_.end(), |
| + [&route_id](const MediaRoute& route) { |
| + return route.media_route_id() == route_id; |
| + }) != routes_.end(); |
| +} |
| + |
| +void MediaRouterUI::OnRouteControllerInvalidated() { |
| + route_controller_observer_.reset(); |
| + handler_->OnRouteControllerInvalidated(); |
| +} |
| + |
| std::string MediaRouterUI::GetSerializedInitiatorOrigin() const { |
| url::Origin origin = initiator_ |
| ? url::Origin(initiator_->GetLastCommittedURL()) |