| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" | 5 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <unordered_map> | 9 #include <unordered_map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "chrome/browser/media/router/issues_observer.h" | 22 #include "chrome/browser/media/router/issues_observer.h" |
| 23 #include "chrome/browser/media/router/media_route.h" | 23 #include "chrome/browser/media/router/media_route.h" |
| 24 #include "chrome/browser/media/router/media_router.h" | 24 #include "chrome/browser/media/router/media_router.h" |
| 25 #include "chrome/browser/media/router/media_router_factory.h" | 25 #include "chrome/browser/media/router/media_router_factory.h" |
| 26 #include "chrome/browser/media/router/media_router_metrics.h" | 26 #include "chrome/browser/media/router/media_router_metrics.h" |
| 27 #include "chrome/browser/media/router/media_routes_observer.h" | 27 #include "chrome/browser/media/router/media_routes_observer.h" |
| 28 #include "chrome/browser/media/router/media_sink.h" | 28 #include "chrome/browser/media/router/media_sink.h" |
| 29 #include "chrome/browser/media/router/media_sinks_observer.h" | 29 #include "chrome/browser/media/router/media_sinks_observer.h" |
| 30 #include "chrome/browser/media/router/media_source.h" | 30 #include "chrome/browser/media/router/media_source.h" |
| 31 #include "chrome/browser/media/router/media_source_helper.h" | 31 #include "chrome/browser/media/router/media_source_helper.h" |
| 32 #include "chrome/browser/media/router/mojo/media_route_controller.h" |
| 32 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h" | 33 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h" |
| 33 #include "chrome/browser/media/router/presentation_service_delegate_impl.h" | 34 #include "chrome/browser/media/router/presentation_service_delegate_impl.h" |
| 34 #include "chrome/browser/media/router/route_request_result.h" | 35 #include "chrome/browser/media/router/route_request_result.h" |
| 35 #include "chrome/browser/profiles/profile.h" | 36 #include "chrome/browser/profiles/profile.h" |
| 36 #include "chrome/browser/sessions/session_tab_helper.h" | 37 #include "chrome/browser/sessions/session_tab_helper.h" |
| 37 #include "chrome/browser/ui/webui/media_router/media_router_localized_strings_pr
ovider.h" | 38 #include "chrome/browser/ui/webui/media_router/media_router_localized_strings_pr
ovider.h" |
| 38 #include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h
" | 39 #include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h
" |
| 39 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle
r.h" | 40 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle
r.h" |
| 40 #include "chrome/common/pref_names.h" | 41 #include "chrome/common/pref_names.h" |
| 41 #include "chrome/common/url_constants.h" | 42 #include "chrome/common/url_constants.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 } | 147 } |
| 147 | 148 |
| 148 MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {} | 149 MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {} |
| 149 | 150 |
| 150 void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( | 151 void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( |
| 151 const std::vector<MediaRoute>& routes, | 152 const std::vector<MediaRoute>& routes, |
| 152 const std::vector<MediaRoute::Id>& joinable_route_ids) { | 153 const std::vector<MediaRoute::Id>& joinable_route_ids) { |
| 153 callback_.Run(routes, joinable_route_ids); | 154 callback_.Run(routes, joinable_route_ids); |
| 154 } | 155 } |
| 155 | 156 |
| 157 MediaRouterUI::UIMediaRouteStatusObserver::UIMediaRouteStatusObserver( |
| 158 MediaRouterWebUIMessageHandler* handler) |
| 159 : handler_(handler) {} |
| 160 MediaRouterUI::UIMediaRouteStatusObserver::~UIMediaRouteStatusObserver() {} |
| 161 |
| 162 void MediaRouterUI::UIMediaRouteStatusObserver::OnMediaRouteStatusUpdated( |
| 163 const MediaStatus& status) { |
| 164 handler_->UpdateMediaRouteStatus(status); |
| 165 } |
| 166 |
| 156 MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) | 167 MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) |
| 157 : ConstrainedWebDialogUI(web_ui), | 168 : ConstrainedWebDialogUI(web_ui), |
| 158 ui_initialized_(false), | 169 ui_initialized_(false), |
| 159 current_route_request_id_(-1), | 170 current_route_request_id_(-1), |
| 160 route_request_counter_(0), | 171 route_request_counter_(0), |
| 161 initiator_(nullptr), | 172 initiator_(nullptr), |
| 162 router_(nullptr), | 173 router_(nullptr), |
| 163 weak_factory_(this) { | 174 weak_factory_(this) { |
| 164 auto handler = base::MakeUnique<MediaRouterWebUIMessageHandler>(this); | 175 auto handler = base::MakeUnique<MediaRouterWebUIMessageHandler>(this); |
| 165 handler_ = handler.get(); | 176 handler_ = handler.get(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 if (presentation_sinks_available) { | 215 if (presentation_sinks_available) { |
| 205 create_session_request_->InvokeErrorCallback(content::PresentationError( | 216 create_session_request_->InvokeErrorCallback(content::PresentationError( |
| 206 content::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED, | 217 content::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED, |
| 207 "Dialog closed.")); | 218 "Dialog closed.")); |
| 208 } else { | 219 } else { |
| 209 create_session_request_->InvokeErrorCallback(content::PresentationError( | 220 create_session_request_->InvokeErrorCallback(content::PresentationError( |
| 210 content::PRESENTATION_ERROR_NO_AVAILABLE_SCREENS, | 221 content::PRESENTATION_ERROR_NO_AVAILABLE_SCREENS, |
| 211 "No screens found.")); | 222 "No screens found.")); |
| 212 } | 223 } |
| 213 } | 224 } |
| 225 if (route_controller_) |
| 226 route_controller_->RemoveObserver(route_status_observer_.get()); |
| 214 } | 227 } |
| 215 | 228 |
| 216 void MediaRouterUI::InitWithDefaultMediaSource( | 229 void MediaRouterUI::InitWithDefaultMediaSource( |
| 217 content::WebContents* initiator, | 230 content::WebContents* initiator, |
| 218 PresentationServiceDelegateImpl* delegate) { | 231 PresentationServiceDelegateImpl* delegate) { |
| 219 DCHECK(initiator); | 232 DCHECK(initiator); |
| 220 DCHECK(!presentation_service_delegate_); | 233 DCHECK(!presentation_service_delegate_); |
| 221 DCHECK(!query_result_manager_.get()); | 234 DCHECK(!query_result_manager_.get()); |
| 222 | 235 |
| 223 InitCommon(initiator); | 236 InitCommon(initiator); |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 } | 621 } |
| 609 | 622 |
| 610 routes_.push_back(route); | 623 routes_.push_back(route); |
| 611 } | 624 } |
| 612 } | 625 } |
| 613 UpdateRoutesToCastModesMapping(); | 626 UpdateRoutesToCastModesMapping(); |
| 614 | 627 |
| 615 if (ui_initialized_) | 628 if (ui_initialized_) |
| 616 handler_->UpdateRoutes(routes_, joinable_route_ids_, | 629 handler_->UpdateRoutes(routes_, joinable_route_ids_, |
| 617 routes_and_cast_modes_); | 630 routes_and_cast_modes_); |
| 631 |
| 632 if (selected_route_ && !IsValidRouteId(selected_route_.value())) { |
| 633 selected_route_.reset(); |
| 634 route_controller_ = nullptr; |
| 635 } |
| 618 } | 636 } |
| 619 | 637 |
| 620 void MediaRouterUI::OnRouteResponseReceived( | 638 void MediaRouterUI::OnRouteResponseReceived( |
| 621 int route_request_id, | 639 int route_request_id, |
| 622 const MediaSink::Id& sink_id, | 640 const MediaSink::Id& sink_id, |
| 623 MediaCastMode cast_mode, | 641 MediaCastMode cast_mode, |
| 624 const base::string16& presentation_request_source_name, | 642 const base::string16& presentation_request_source_name, |
| 625 const RouteRequestResult& result) { | 643 const RouteRequestResult& result) { |
| 626 DVLOG(1) << "OnRouteResponseReceived"; | 644 DVLOG(1) << "OnRouteResponseReceived"; |
| 627 // If we receive a new route that we aren't expecting, do nothing. | 645 // If we receive a new route that we aren't expecting, do nothing. |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 MediaRouterMetrics::RecordMediaRouterDialogLoaded( | 772 MediaRouterMetrics::RecordMediaRouterDialogLoaded( |
| 755 base::Time::Now() - start_time_); | 773 base::Time::Now() - start_time_); |
| 756 start_time_ = base::Time(); | 774 start_time_ = base::Time(); |
| 757 } | 775 } |
| 758 } | 776 } |
| 759 | 777 |
| 760 void MediaRouterUI::UpdateMaxDialogHeight(int height) { | 778 void MediaRouterUI::UpdateMaxDialogHeight(int height) { |
| 761 handler_->UpdateMaxDialogHeight(height); | 779 handler_->UpdateMaxDialogHeight(height); |
| 762 } | 780 } |
| 763 | 781 |
| 782 void MediaRouterUI::PlayRoute() { |
| 783 if (route_controller_) |
| 784 route_controller_->Play(); |
| 785 } |
| 786 |
| 787 void MediaRouterUI::PauseRoute() { |
| 788 if (route_controller_) |
| 789 route_controller_->Pause(); |
| 790 } |
| 791 |
| 792 void MediaRouterUI::SeekRoute(uint32_t time) { |
| 793 if (route_controller_) |
| 794 route_controller_->Seek(time); |
| 795 } |
| 796 |
| 797 void MediaRouterUI::SetRouteVolume(float volume) { |
| 798 if (route_controller_) |
| 799 route_controller_->SetVolume(volume); |
| 800 } |
| 801 |
| 802 void MediaRouterUI::SetRouteMute(bool mute) { |
| 803 if (route_controller_) |
| 804 route_controller_->SetMute(mute); |
| 805 } |
| 806 |
| 807 void MediaRouterUI::OnUIDetailsViewOpened(MediaRoute::Id route_id) { |
| 808 if (!IsValidRouteId(route_id)) |
| 809 return; |
| 810 selected_route_ = base::Optional<MediaRoute::Id>(route_id); |
| 811 route_controller_ = router_->GetControllerForRoute(route_id); |
| 812 route_status_observer_ = |
| 813 base::MakeUnique<UIMediaRouteStatusObserver>(handler_); |
| 814 route_controller_->AddObserver(route_status_observer_.get()); |
| 815 } |
| 816 |
| 817 void MediaRouterUI::OnUIDetailsViewClosed() { |
| 818 selected_route_.reset(); |
| 819 if (route_controller_) |
| 820 route_controller_->RemoveObserver(route_status_observer_.get()); |
| 821 route_controller_ = nullptr; |
| 822 route_status_observer_.reset(); |
| 823 } |
| 824 |
| 825 bool MediaRouterUI::IsValidRouteId(const MediaRoute::Id& route_id) const { |
| 826 return std::find_if(routes_.begin(), routes_.end(), |
| 827 [&route_id](const MediaRoute& route) { |
| 828 return route.media_route_id() == route_id; |
| 829 }) != routes_.end(); |
| 830 } |
| 831 |
| 764 std::string MediaRouterUI::GetSerializedInitiatorOrigin() const { | 832 std::string MediaRouterUI::GetSerializedInitiatorOrigin() const { |
| 765 url::Origin origin = initiator_ | 833 url::Origin origin = initiator_ |
| 766 ? url::Origin(initiator_->GetLastCommittedURL()) | 834 ? url::Origin(initiator_->GetLastCommittedURL()) |
| 767 : url::Origin(); | 835 : url::Origin(); |
| 768 return origin.Serialize(); | 836 return origin.Serialize(); |
| 769 } | 837 } |
| 770 | 838 |
| 771 } // namespace media_router | 839 } // namespace media_router |
| OLD | NEW |