Chromium Code Reviews| 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 <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 116 void OnIssueUpdated(const Issue* issue) override { ui_->SetIssue(issue); } | 116 void OnIssueUpdated(const Issue* issue) override { ui_->SetIssue(issue); } |
| 117 | 117 |
| 118 private: | 118 private: |
| 119 // Reference back to the owning MediaRouterUI instance. | 119 // Reference back to the owning MediaRouterUI instance. |
| 120 MediaRouterUI* ui_; | 120 MediaRouterUI* ui_; |
| 121 | 121 |
| 122 DISALLOW_COPY_AND_ASSIGN(UIIssuesObserver); | 122 DISALLOW_COPY_AND_ASSIGN(UIIssuesObserver); |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 MediaRouterUI::UIMediaRoutesObserver::UIMediaRoutesObserver( | 125 MediaRouterUI::UIMediaRoutesObserver::UIMediaRoutesObserver( |
| 126 MediaRouter* router, const MediaSource::Id& source_id, | 126 MediaRouter* router, |
| 127 const MediaSource::Id& source_id, | |
| 128 const SourceCastModeMapCallback& source_cast_mode_callback, | |
| 127 const RoutesUpdatedCallback& callback) | 129 const RoutesUpdatedCallback& callback) |
| 128 : MediaRoutesObserver(router, source_id), callback_(callback) { | 130 : MediaRoutesObserver(router, source_id), |
| 131 source_cast_mode_callback_(source_cast_mode_callback), | |
| 132 callback_(callback) { | |
| 129 DCHECK(!callback_.is_null()); | 133 DCHECK(!callback_.is_null()); |
| 130 } | 134 } |
| 131 | 135 |
| 132 MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {} | 136 MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {} |
| 133 | 137 |
| 134 void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( | 138 void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( |
| 135 const std::vector<MediaRoute>& routes, | 139 const std::vector<MediaRoute>& routes, |
| 136 const std::vector<MediaRoute::Id>& joinable_route_ids) { | 140 const std::vector<MediaRoute::Id>& joinable_route_ids) { |
| 137 std::vector<MediaRoute> routes_for_display; | 141 std::vector<MediaRoute> routes_for_display; |
| 138 std::vector<MediaRoute::Id> joinable_route_ids_for_display; | 142 std::vector<MediaRoute::Id> joinable_route_ids_for_display; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 149 } | 153 } |
| 150 #endif | 154 #endif |
| 151 if (ContainsValue(joinable_route_ids, route.media_route_id())) { | 155 if (ContainsValue(joinable_route_ids, route.media_route_id())) { |
| 152 joinable_route_ids_for_display.push_back(route.media_route_id()); | 156 joinable_route_ids_for_display.push_back(route.media_route_id()); |
| 153 } | 157 } |
| 154 | 158 |
| 155 routes_for_display.push_back(route); | 159 routes_for_display.push_back(route); |
| 156 } | 160 } |
| 157 } | 161 } |
| 158 | 162 |
| 159 callback_.Run(routes_for_display, joinable_route_ids_for_display); | 163 auto available_source_map(source_cast_mode_callback_.Run()); |
|
imcheng
2016/06/06 20:48:19
I was wondering if we can move the computation of
btolsch
2016/06/06 23:46:52
That's where I originally put it but it would be m
imcheng
2016/06/07 17:25:42
Or you could just modify an existing test that inv
btolsch
2016/06/07 19:45:34
Done. Modified new tests to invoke MediaRouterUI::
| |
| 164 std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes; | |
| 165 for (const auto& route : routes_for_display) { | |
| 166 auto source_entry = available_source_map.find(route.media_source().id()); | |
| 167 if (source_entry != end(available_source_map)) { | |
|
imcheng
2016/06/06 20:48:19
nit: prefer available_source_map.end().
btolsch
2016/06/06 23:46:53
Done.
| |
| 168 current_cast_modes.insert( | |
| 169 std::make_pair(route.media_route_id(), source_entry->second)); | |
| 170 } | |
| 171 } | |
| 172 | |
| 173 callback_.Run(routes_for_display, joinable_route_ids_for_display, | |
| 174 current_cast_modes); | |
| 160 } | 175 } |
| 161 | 176 |
| 162 MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) | 177 MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) |
| 163 : ConstrainedWebDialogUI(web_ui), | 178 : ConstrainedWebDialogUI(web_ui), |
| 164 handler_(new MediaRouterWebUIMessageHandler(this)), | 179 handler_(new MediaRouterWebUIMessageHandler(this)), |
| 165 ui_initialized_(false), | 180 ui_initialized_(false), |
| 166 current_route_request_id_(-1), | 181 current_route_request_id_(-1), |
| 167 route_request_counter_(0), | 182 route_request_counter_(0), |
| 168 initiator_(nullptr), | 183 initiator_(nullptr), |
| 169 router_(nullptr), | 184 router_(nullptr), |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 217 DCHECK(!query_result_manager_.get()); | 232 DCHECK(!query_result_manager_.get()); |
| 218 | 233 |
| 219 presentation_service_delegate_ = delegate; | 234 presentation_service_delegate_ = delegate; |
| 220 presentation_service_delegate_->AddDefaultPresentationRequestObserver(this); | 235 presentation_service_delegate_->AddDefaultPresentationRequestObserver(this); |
| 221 InitCommon(presentation_service_delegate_->web_contents()); | 236 InitCommon(presentation_service_delegate_->web_contents()); |
| 222 if (presentation_service_delegate_->HasDefaultPresentationRequest()) { | 237 if (presentation_service_delegate_->HasDefaultPresentationRequest()) { |
| 223 OnDefaultPresentationChanged( | 238 OnDefaultPresentationChanged( |
| 224 presentation_service_delegate_->GetDefaultPresentationRequest()); | 239 presentation_service_delegate_->GetDefaultPresentationRequest()); |
| 225 } else { | 240 } else { |
| 226 // Register for MediaRoute updates without a media source. | 241 // Register for MediaRoute updates without a media source. |
| 227 routes_observer_.reset(new UIMediaRoutesObserver(router_, MediaSource::Id(), | 242 routes_observer_.reset(new UIMediaRoutesObserver( |
| 228 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); | 243 router_, MediaSource::Id(), |
| 244 base::Bind(&MediaRouterUI::GetAvailableSourceMap, | |
| 245 base::Unretained(this)), | |
| 246 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); | |
| 229 } | 247 } |
| 230 } | 248 } |
| 231 | 249 |
| 232 void MediaRouterUI::InitWithPresentationSessionRequest( | 250 void MediaRouterUI::InitWithPresentationSessionRequest( |
| 233 content::WebContents* initiator, | 251 content::WebContents* initiator, |
| 234 const base::WeakPtr<PresentationServiceDelegateImpl>& delegate, | 252 const base::WeakPtr<PresentationServiceDelegateImpl>& delegate, |
| 235 std::unique_ptr<CreatePresentationConnectionRequest> | 253 std::unique_ptr<CreatePresentationConnectionRequest> |
| 236 create_session_request) { | 254 create_session_request) { |
| 237 DCHECK(initiator); | 255 DCHECK(initiator); |
| 238 DCHECK(create_session_request); | 256 DCHECK(create_session_request); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 295 void MediaRouterUI::OnDefaultPresentationChanged( | 313 void MediaRouterUI::OnDefaultPresentationChanged( |
| 296 const PresentationRequest& presentation_request) { | 314 const PresentationRequest& presentation_request) { |
| 297 MediaSource source = presentation_request.GetMediaSource(); | 315 MediaSource source = presentation_request.GetMediaSource(); |
| 298 presentation_request_.reset(new PresentationRequest(presentation_request)); | 316 presentation_request_.reset(new PresentationRequest(presentation_request)); |
| 299 query_result_manager_->StartSinksQuery( | 317 query_result_manager_->StartSinksQuery( |
| 300 MediaCastMode::DEFAULT, source, | 318 MediaCastMode::DEFAULT, source, |
| 301 presentation_request_->frame_url().GetOrigin()); | 319 presentation_request_->frame_url().GetOrigin()); |
| 302 // Register for MediaRoute updates. | 320 // Register for MediaRoute updates. |
| 303 routes_observer_.reset(new UIMediaRoutesObserver( | 321 routes_observer_.reset(new UIMediaRoutesObserver( |
| 304 router_, source.id(), | 322 router_, source.id(), |
| 323 base::Bind(&MediaRouterUI::GetAvailableSourceMap, base::Unretained(this)), | |
| 305 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); | 324 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); |
| 306 | 325 |
| 307 UpdateCastModes(); | 326 UpdateCastModes(); |
| 308 } | 327 } |
| 309 | 328 |
| 310 void MediaRouterUI::OnDefaultPresentationRemoved() { | 329 void MediaRouterUI::OnDefaultPresentationRemoved() { |
| 311 presentation_request_.reset(); | 330 presentation_request_.reset(); |
| 312 query_result_manager_->StopSinksQuery(MediaCastMode::DEFAULT); | 331 query_result_manager_->StopSinksQuery(MediaCastMode::DEFAULT); |
| 313 // Register for MediaRoute updates without a media source. | 332 // Register for MediaRoute updates without a media source. |
| 314 routes_observer_.reset(new UIMediaRoutesObserver( | 333 routes_observer_.reset(new UIMediaRoutesObserver( |
| 315 router_, MediaSource::Id(), | 334 router_, MediaSource::Id(), |
| 316 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); | 335 base::Bind(&MediaRouterUI::GetAvailableSourceMap, base::Unretained(this)), |
| 336 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); | |
| 317 UpdateCastModes(); | 337 UpdateCastModes(); |
| 318 } | 338 } |
| 319 | 339 |
| 320 void MediaRouterUI::UpdateCastModes() { | 340 void MediaRouterUI::UpdateCastModes() { |
| 321 // Gets updated cast modes from |query_result_manager_| and forwards it to UI. | 341 // Gets updated cast modes from |query_result_manager_| and forwards it to UI. |
| 322 query_result_manager_->GetSupportedCastModes(&cast_modes_); | 342 query_result_manager_->GetSupportedCastModes(&cast_modes_); |
| 323 if (ui_initialized_) { | 343 if (ui_initialized_) { |
| 324 handler_->UpdateCastModes(cast_modes_, GetPresentationRequestSourceName()); | 344 handler_->UpdateCastModes(cast_modes_, GetPresentationRequestSourceName()); |
| 325 } | 345 } |
| 326 } | 346 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 505 return sink1.sink.id() < sink2.sink.id(); | 525 return sink1.sink.id() < sink2.sink.id(); |
| 506 }); | 526 }); |
| 507 | 527 |
| 508 if (ui_initialized_) handler_->UpdateSinks(sinks_); | 528 if (ui_initialized_) handler_->UpdateSinks(sinks_); |
| 509 } | 529 } |
| 510 | 530 |
| 511 void MediaRouterUI::SetIssue(const Issue* issue) { | 531 void MediaRouterUI::SetIssue(const Issue* issue) { |
| 512 if (ui_initialized_) handler_->UpdateIssue(issue); | 532 if (ui_initialized_) handler_->UpdateIssue(issue); |
| 513 } | 533 } |
| 514 | 534 |
| 535 std::unordered_map<MediaSource::Id, MediaCastMode> | |
| 536 MediaRouterUI::GetAvailableSourceMap() { | |
| 537 std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map; | |
| 538 for (const auto& cast_mode : cast_modes_) { | |
| 539 available_source_map.insert(std::make_pair( | |
| 540 query_result_manager_->GetSourceForCastMode(cast_mode).id(), | |
| 541 cast_mode)); | |
| 542 } | |
| 543 return available_source_map; | |
| 544 } | |
| 545 | |
| 515 void MediaRouterUI::OnRoutesUpdated( | 546 void MediaRouterUI::OnRoutesUpdated( |
| 516 const std::vector<MediaRoute>& routes, | 547 const std::vector<MediaRoute>& routes, |
| 517 const std::vector<MediaRoute::Id>& joinable_route_ids) { | 548 const std::vector<MediaRoute::Id>& joinable_route_ids, |
| 549 const std::unordered_map<MediaRoute::Id, MediaCastMode>& | |
| 550 current_cast_modes) { | |
| 518 routes_ = routes; | 551 routes_ = routes; |
| 519 joinable_route_ids_ = joinable_route_ids; | 552 joinable_route_ids_ = joinable_route_ids; |
| 520 if (ui_initialized_) handler_->UpdateRoutes(routes_, joinable_route_ids_); | 553 current_cast_modes_ = current_cast_modes; |
| 554 | |
| 555 if (ui_initialized_) | |
| 556 handler_->UpdateRoutes(routes_, joinable_route_ids_, current_cast_modes_); | |
| 521 } | 557 } |
| 522 | 558 |
| 523 void MediaRouterUI::OnRouteResponseReceived( | 559 void MediaRouterUI::OnRouteResponseReceived( |
| 524 int route_request_id, | 560 int route_request_id, |
| 525 const MediaSink::Id& sink_id, | 561 const MediaSink::Id& sink_id, |
| 526 MediaCastMode cast_mode, | 562 MediaCastMode cast_mode, |
| 527 const base::string16& presentation_request_source_name, | 563 const base::string16& presentation_request_source_name, |
| 528 const RouteRequestResult& result) { | 564 const RouteRequestResult& result) { |
| 529 DVLOG(1) << "OnRouteResponseReceived"; | 565 DVLOG(1) << "OnRouteResponseReceived"; |
| 530 // If we receive a new route that we aren't expecting, do nothing. | 566 // If we receive a new route that we aren't expecting, do nothing. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 654 base::Time::Now() - start_time_); | 690 base::Time::Now() - start_time_); |
| 655 start_time_ = base::Time(); | 691 start_time_ = base::Time(); |
| 656 } | 692 } |
| 657 } | 693 } |
| 658 | 694 |
| 659 void MediaRouterUI::UpdateMaxDialogHeight(int height) { | 695 void MediaRouterUI::UpdateMaxDialogHeight(int height) { |
| 660 handler_->UpdateMaxDialogHeight(height); | 696 handler_->UpdateMaxDialogHeight(height); |
| 661 } | 697 } |
| 662 | 698 |
| 663 } // namespace media_router | 699 } // namespace media_router |
| OLD | NEW |