Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(691)

Side by Side Diff: chrome/browser/ui/webui/media_router/media_router_ui.cc

Issue 2540773005: Add GetCurrentRoutes() to MediaRouter API, ensure dialog has routes at init (Closed)
Patch Set: Address Derek's comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 const RoutesUpdatedCallback& callback) 128 const RoutesUpdatedCallback& callback)
129 : MediaRoutesObserver(router, source_id), callback_(callback) { 129 : MediaRoutesObserver(router, source_id), callback_(callback) {
130 DCHECK(!callback_.is_null()); 130 DCHECK(!callback_.is_null());
131 } 131 }
132 132
133 MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {} 133 MediaRouterUI::UIMediaRoutesObserver::~UIMediaRoutesObserver() {}
134 134
135 void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated( 135 void MediaRouterUI::UIMediaRoutesObserver::OnRoutesUpdated(
136 const std::vector<MediaRoute>& routes, 136 const std::vector<MediaRoute>& routes,
137 const std::vector<MediaRoute::Id>& joinable_route_ids) { 137 const std::vector<MediaRoute::Id>& joinable_route_ids) {
138 std::vector<MediaRoute> routes_for_display; 138 callback_.Run(routes, joinable_route_ids);
139 std::vector<MediaRoute::Id> joinable_route_ids_for_display;
140 for (const MediaRoute& route : routes) {
141 if (route.for_display()) {
142 #ifndef NDEBUG
143 for (const MediaRoute& existing_route : routes_for_display) {
144 if (existing_route.media_sink_id() == route.media_sink_id()) {
145 DVLOG(2) << "Received another route for display with the same sink"
146 << " id as an existing route. " << route.media_route_id()
147 << " has the same sink id as "
148 << existing_route.media_sink_id() << ".";
149 }
150 }
151 #endif
152 if (base::ContainsValue(joinable_route_ids, route.media_route_id())) {
153 joinable_route_ids_for_display.push_back(route.media_route_id());
154 }
155
156 routes_for_display.push_back(route);
157 }
158 }
159
160 callback_.Run(routes_for_display, joinable_route_ids_for_display);
161 } 139 }
162 140
163 MediaRouterUI::MediaRouterUI(content::WebUI* web_ui) 141 MediaRouterUI::MediaRouterUI(content::WebUI* web_ui)
164 : ConstrainedWebDialogUI(web_ui), 142 : ConstrainedWebDialogUI(web_ui),
165 handler_(new MediaRouterWebUIMessageHandler(this)), 143 handler_(new MediaRouterWebUIMessageHandler(this)),
166 ui_initialized_(false), 144 ui_initialized_(false),
167 current_route_request_id_(-1), 145 current_route_request_id_(-1),
168 route_request_counter_(0), 146 route_request_counter_(0),
169 initiator_(nullptr), 147 initiator_(nullptr),
170 router_(nullptr), 148 router_(nullptr),
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 // Desktop mirror mode is always available. 268 // Desktop mirror mode is always available.
291 query_result_manager_->SetSourcesForCastMode( 269 query_result_manager_->SetSourcesForCastMode(
292 MediaCastMode::DESKTOP_MIRROR, {MediaSourceForDesktop()}, origin); 270 MediaCastMode::DESKTOP_MIRROR, {MediaSourceForDesktop()}, origin);
293 initiator_ = initiator; 271 initiator_ = initiator;
294 SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator); 272 SessionID::id_type tab_id = SessionTabHelper::IdForTab(initiator);
295 if (tab_id != -1) { 273 if (tab_id != -1) {
296 MediaSource mirroring_source(MediaSourceForTab(tab_id)); 274 MediaSource mirroring_source(MediaSourceForTab(tab_id));
297 query_result_manager_->SetSourcesForCastMode(MediaCastMode::TAB_MIRROR, 275 query_result_manager_->SetSourcesForCastMode(MediaCastMode::TAB_MIRROR,
298 {mirroring_source}, origin); 276 {mirroring_source}, origin);
299 } 277 }
278
279 OnRoutesUpdated(router_->GetCurrentRoutes(), std::vector<MediaRoute::Id>());
imcheng 2016/12/01 20:06:53 Please add a comment about why we are doing this.
imcheng 2016/12/01 20:06:53 On second thought you might want to call this afte
takumif 2016/12/02 19:23:23 Done.
takumif 2016/12/02 19:23:23 Done.
300 UpdateCastModes(); 280 UpdateCastModes();
301 } 281 }
302 282
303 void MediaRouterUI::InitForTest( 283 void MediaRouterUI::InitForTest(
304 MediaRouter* router, 284 MediaRouter* router,
305 content::WebContents* initiator, 285 content::WebContents* initiator,
306 MediaRouterWebUIMessageHandler* handler, 286 MediaRouterWebUIMessageHandler* handler,
307 std::unique_ptr<CreatePresentationConnectionRequest> 287 std::unique_ptr<CreatePresentationConnectionRequest>
308 create_session_request) { 288 create_session_request) {
309 router_ = router; 289 router_ = router;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 } 323 }
344 324
345 void MediaRouterUI::UpdateCastModes() { 325 void MediaRouterUI::UpdateCastModes() {
346 // Gets updated cast modes from |query_result_manager_| and forwards it to UI. 326 // Gets updated cast modes from |query_result_manager_| and forwards it to UI.
347 cast_modes_ = query_result_manager_->GetSupportedCastModes(); 327 cast_modes_ = query_result_manager_->GetSupportedCastModes();
348 if (ui_initialized_) { 328 if (ui_initialized_) {
349 handler_->UpdateCastModes(cast_modes_, GetPresentationRequestSourceName()); 329 handler_->UpdateCastModes(cast_modes_, GetPresentationRequestSourceName());
350 } 330 }
351 } 331 }
352 332
333 void MediaRouterUI::UpdateCurrentCastModes() {
imcheng 2016/12/01 20:06:53 This should probably be renamed UpdateRouteToCastM
takumif 2016/12/02 19:23:23 Done.
334 std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
335 for (const auto& cast_mode : cast_modes_) {
336 for (const auto& source :
337 query_result_manager_->GetSourcesForCastMode(cast_mode)) {
338 available_source_map.insert(std::make_pair(source.id(), cast_mode));
339 }
340 }
341
342 current_cast_modes_.clear();
343 for (const auto& route : routes_) {
344 auto source_entry = available_source_map.find(route.media_source().id());
345 if (source_entry != available_source_map.end()) {
346 current_cast_modes_.insert(
347 std::make_pair(route.media_route_id(), source_entry->second));
348 }
349 }
350 }
351
353 void MediaRouterUI::Close() { 352 void MediaRouterUI::Close() {
354 ConstrainedWebDialogDelegate* delegate = GetConstrainedDelegate(); 353 ConstrainedWebDialogDelegate* delegate = GetConstrainedDelegate();
355 if (delegate) { 354 if (delegate) {
356 delegate->GetWebDialogDelegate()->OnDialogClosed(std::string()); 355 delegate->GetWebDialogDelegate()->OnDialogClosed(std::string());
357 delegate->OnDialogCloseFromWebUI(); 356 delegate->OnDialogCloseFromWebUI();
358 } 357 }
359 } 358 }
360 359
361 void MediaRouterUI::UIInitialized() { 360 void MediaRouterUI::UIInitialized() {
362 TRACE_EVENT_NESTABLE_ASYNC_END0("media_router", "UI", initiator_); 361 TRACE_EVENT_NESTABLE_ASYNC_END0("media_router", "UI", initiator_);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 if (ui_initialized_) handler_->UpdateSinks(sinks_); 520 if (ui_initialized_) handler_->UpdateSinks(sinks_);
522 } 521 }
523 522
524 void MediaRouterUI::SetIssue(const Issue* issue) { 523 void MediaRouterUI::SetIssue(const Issue* issue) {
525 if (ui_initialized_) handler_->UpdateIssue(issue); 524 if (ui_initialized_) handler_->UpdateIssue(issue);
526 } 525 }
527 526
528 void MediaRouterUI::OnRoutesUpdated( 527 void MediaRouterUI::OnRoutesUpdated(
529 const std::vector<MediaRoute>& routes, 528 const std::vector<MediaRoute>& routes,
530 const std::vector<MediaRoute::Id>& joinable_route_ids) { 529 const std::vector<MediaRoute::Id>& joinable_route_ids) {
531 routes_ = routes; 530 routes_.clear();
532 joinable_route_ids_ = joinable_route_ids; 531 joinable_route_ids_.clear();
533 532
534 std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map; 533 for (const MediaRoute& route : routes) {
535 for (const auto& cast_mode : cast_modes_) { 534 if (route.for_display()) {
536 for (const auto& source : 535 #ifndef NDEBUG
537 query_result_manager_->GetSourcesForCastMode(cast_mode)) { 536 for (const MediaRoute& existing_route : routes_) {
538 available_source_map.insert(std::make_pair(source.id(), cast_mode)); 537 if (existing_route.media_sink_id() == route.media_sink_id()) {
538 DVLOG(2) << "Received another route for display with the same sink"
539 << " id as an existing route. " << route.media_route_id()
540 << " has the same sink id as "
541 << existing_route.media_sink_id() << ".";
542 }
543 }
544 #endif
545 if (base::ContainsValue(joinable_route_ids, route.media_route_id())) {
546 joinable_route_ids_.push_back(route.media_route_id());
547 }
548
549 routes_.push_back(route);
539 } 550 }
540 } 551 }
541 552 UpdateCurrentCastModes();
542 current_cast_modes_.clear();
543 for (const auto& route : routes) {
544 auto source_entry = available_source_map.find(route.media_source().id());
545 if (source_entry != available_source_map.end()) {
546 current_cast_modes_.insert(
547 std::make_pair(route.media_route_id(), source_entry->second));
548 }
549 }
550 553
551 if (ui_initialized_) 554 if (ui_initialized_)
552 handler_->UpdateRoutes(routes_, joinable_route_ids_, current_cast_modes_); 555 handler_->UpdateRoutes(routes_, joinable_route_ids_, current_cast_modes_);
553 } 556 }
554 557
555 void MediaRouterUI::OnRouteResponseReceived( 558 void MediaRouterUI::OnRouteResponseReceived(
556 int route_request_id, 559 int route_request_id,
557 const MediaSink::Id& sink_id, 560 const MediaSink::Id& sink_id,
558 MediaCastMode cast_mode, 561 MediaCastMode cast_mode,
559 const base::string16& presentation_request_source_name, 562 const base::string16& presentation_request_source_name,
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 base::Time::Now() - start_time_); 693 base::Time::Now() - start_time_);
691 start_time_ = base::Time(); 694 start_time_ = base::Time();
692 } 695 }
693 } 696 }
694 697
695 void MediaRouterUI::UpdateMaxDialogHeight(int height) { 698 void MediaRouterUI::UpdateMaxDialogHeight(int height) {
696 handler_->UpdateMaxDialogHeight(height); 699 handler_->UpdateMaxDialogHeight(height);
697 } 700 }
698 701
699 } // namespace media_router 702 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698