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

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

Issue 2040883002: [Media Router] Assign each route a current cast mode if possible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months 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 <utility> 9 #include <utility>
10 10
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698