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

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

Issue 2862393002: [Media Router] Force DEFAULT cast mode when starting presentations from content. (Closed)
Patch Set: Fix bug found by closure compiler Created 3 years, 7 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 <unordered_map> 9 #include <unordered_map>
10 #include <utility> 10 #include <utility>
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 std::unique_ptr<CreatePresentationConnectionRequest> 263 std::unique_ptr<CreatePresentationConnectionRequest>
264 create_session_request) { 264 create_session_request) {
265 DCHECK(initiator); 265 DCHECK(initiator);
266 DCHECK(delegate); 266 DCHECK(delegate);
267 DCHECK(create_session_request); 267 DCHECK(create_session_request);
268 DCHECK(!create_session_request_); 268 DCHECK(!create_session_request_);
269 DCHECK(!query_result_manager_); 269 DCHECK(!query_result_manager_);
270 270
271 create_session_request_ = std::move(create_session_request); 271 create_session_request_ = std::move(create_session_request);
272 presentation_service_delegate_ = delegate->GetWeakPtr(); 272 presentation_service_delegate_ = delegate->GetWeakPtr();
273
273 InitCommon(initiator); 274 InitCommon(initiator);
274 OnDefaultPresentationChanged(create_session_request_->presentation_request()); 275 OnDefaultPresentationChanged(
276 create_session_request_->presentation_request());
275 } 277 }
276 278
277 void MediaRouterUI::InitCommon(content::WebContents* initiator) { 279 void MediaRouterUI::InitCommon(content::WebContents* initiator) {
278 DCHECK(initiator); 280 DCHECK(initiator);
279 DCHECK(router_); 281 DCHECK(router_);
280 282
281 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("media_router", "UI", initiator, 283 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("media_router", "UI", initiator,
282 "MediaRouterUI::InitCommon", this); 284 "MediaRouterUI::InitCommon", this);
283 285
286 // Presentation requests from content must show the origin requesting
287 // presentation: crbug.com/704964
288 if (create_session_request_)
289 forced_cast_mode_ = MediaCastMode::DEFAULT;
290
284 router_->OnUserGesture(); 291 router_->OnUserGesture();
285 292
286 // Create |collator_| before |query_result_manager_| so that |collator_| is 293 // Create |collator_| before |query_result_manager_| so that |collator_| is
287 // already set up when we get a callback from |query_result_manager_|. 294 // already set up when we get a callback from |query_result_manager_|.
288 UErrorCode error = U_ZERO_ERROR; 295 UErrorCode error = U_ZERO_ERROR;
289 const std::string& locale = g_browser_process->GetApplicationLocale(); 296 const std::string& locale = g_browser_process->GetApplicationLocale();
290 collator_.reset( 297 collator_.reset(
291 icu::Collator::createInstance(icu::Locale(locale.c_str()), error)); 298 icu::Collator::createInstance(icu::Locale(locale.c_str()), error));
292 if (U_FAILURE(error)) { 299 if (U_FAILURE(error)) {
293 DLOG(ERROR) << "Failed to create collator for locale " << locale; 300 DLOG(ERROR) << "Failed to create collator for locale " << locale;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 routes_observer_.reset(new UIMediaRoutesObserver( 357 routes_observer_.reset(new UIMediaRoutesObserver(
351 router_, source_for_route_observer.id(), 358 router_, source_for_route_observer.id(),
352 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); 359 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this))));
353 360
354 UpdateCastModes(); 361 UpdateCastModes();
355 } 362 }
356 363
357 void MediaRouterUI::OnDefaultPresentationRemoved() { 364 void MediaRouterUI::OnDefaultPresentationRemoved() {
358 presentation_request_.reset(); 365 presentation_request_.reset();
359 query_result_manager_->RemoveSourcesForCastMode(MediaCastMode::DEFAULT); 366 query_result_manager_->RemoveSourcesForCastMode(MediaCastMode::DEFAULT);
367
368 // This should not be set if the dialog was initiated with a default
369 // presentation request from the top level frame. However, clear it just to
370 // be safe.
371 forced_cast_mode_ = base::nullopt;
372
360 // Register for MediaRoute updates without a media source. 373 // Register for MediaRoute updates without a media source.
361 routes_observer_.reset(new UIMediaRoutesObserver( 374 routes_observer_.reset(new UIMediaRoutesObserver(
362 router_, MediaSource::Id(), 375 router_, MediaSource::Id(),
363 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); 376 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this))));
364 UpdateCastModes(); 377 UpdateCastModes();
365 } 378 }
366 379
367 void MediaRouterUI::UpdateCastModes() { 380 void MediaRouterUI::UpdateCastModes() {
368 // Gets updated cast modes from |query_result_manager_| and forwards it to UI. 381 // Gets updated cast modes from |query_result_manager_| and forwards it to UI.
369 cast_modes_ = query_result_manager_->GetSupportedCastModes(); 382 cast_modes_ = query_result_manager_->GetSupportedCastModes();
370 if (ui_initialized_) { 383 if (ui_initialized_) {
371 handler_->UpdateCastModes(cast_modes_, GetPresentationRequestSourceName()); 384 handler_->UpdateCastModes(cast_modes_, GetPresentationRequestSourceName(),
385 forced_cast_mode());
372 } 386 }
373 } 387 }
374 388
375 void MediaRouterUI::UpdateRoutesToCastModesMapping() { 389 void MediaRouterUI::UpdateRoutesToCastModesMapping() {
376 std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map; 390 std::unordered_map<MediaSource::Id, MediaCastMode> available_source_map;
377 for (const auto& cast_mode : cast_modes_) { 391 for (const auto& cast_mode : cast_modes_) {
378 for (const auto& source : 392 for (const auto& source :
379 query_result_manager_->GetSourcesForCastMode(cast_mode)) { 393 query_result_manager_->GetSourcesForCastMode(cast_mode)) {
380 available_source_map.insert(std::make_pair(source.id(), cast_mode)); 394 available_source_map.insert(std::make_pair(source.id(), cast_mode));
381 } 395 }
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 } 829 }
816 830
817 std::string MediaRouterUI::GetSerializedInitiatorOrigin() const { 831 std::string MediaRouterUI::GetSerializedInitiatorOrigin() const {
818 url::Origin origin = initiator_ 832 url::Origin origin = initiator_
819 ? url::Origin(initiator_->GetLastCommittedURL()) 833 ? url::Origin(initiator_->GetLastCommittedURL())
820 : url::Origin(); 834 : url::Origin();
821 return origin.Serialize(); 835 return origin.Serialize();
822 } 836 }
823 837
824 } // namespace media_router 838 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698