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..1a092ed0eacce33bfec2c2b90aead351fb8e0cdd 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,22 @@ 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) { |
+ ui_->handler_->UpdateMediaRouteStatus(status); |
+} |
+ |
+void MediaRouterUI::UIMediaRouteControllerObserver::OnControllerInvalidated() { |
+ ui_->OnRouteControllerInvalidated(); |
+} |
+ |
MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) |
: ConstrainedWebDialogUI(web_ui), |
ui_initialized_(false), |
@@ -760,6 +777,54 @@ 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_->controller()->Seek(time); |
+} |
+ |
+void MediaRouterUI::SetRouteVolume(float volume) { |
+ if (route_controller_observer_) |
+ route_controller_observer_->controller()->SetVolume(volume); |
+} |
+ |
+void MediaRouterUI::SetRouteMute(bool mute) { |
+ if (route_controller_observer_) |
+ route_controller_observer_->controller()->SetMute(mute); |
+} |
+ |
+void MediaRouterUI::OnUIDetailsViewOpened(MediaRoute::Id route_id) { |
imcheng
2017/04/22 00:22:51
const ref for route_id
takumif
2017/04/24 20:59:23
Done.
|
+ if (!IsValidRouteId(route_id)) |
+ return; |
+ route_controller_observer_ = base::MakeUnique<UIMediaRouteControllerObserver>( |
imcheng
2017/04/22 00:22:51
What if route_controller_observer_ is already non-
takumif
2017/04/24 20:59:23
That should be fine. Given we can only have the ro
imcheng
2017/04/26 21:48:39
In general we can't always trust the WebUI to do t
takumif
2017/04/27 03:04:17
Done.
|
+ this, router_->GetRouteController(route_id)); |
+} |
+ |
+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()) |