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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |