Commit 153f8457 authored by Thomas Guilbert's avatar Thomas Guilbert Committed by Commit Bot

Fix HasSingleSecurityOrigin for HLS

HLS manifests can request segments from a different origin than the
original manifest's origin. We do not inspect HLS manifests within
Chromium, and instead delegate to Android's MediaPlayer. This means we
need to be conservative, and always assume segments might come from a
different origin. HasSingleSecurityOrigin should always return false
when decoding HLS.

Bug: 864283
Change-Id: Ie16849ac6f29ae7eaa9caf342ad0509a226228ef
Reviewed-on: https://chromium-review.googlesource.com/1142691Reviewed-by: default avatarDale Curtis <dalecurtis@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Thomas Guilbert <tguilbert@chromium.org>
Cr-Commit-Position: refs/heads/master@{#576378}
parent 13ca4169
...@@ -1126,6 +1126,12 @@ bool WebMediaPlayerImpl::DidGetOpaqueResponseFromServiceWorker() const { ...@@ -1126,6 +1126,12 @@ bool WebMediaPlayerImpl::DidGetOpaqueResponseFromServiceWorker() const {
} }
bool WebMediaPlayerImpl::HasSingleSecurityOrigin() const { bool WebMediaPlayerImpl::HasSingleSecurityOrigin() const {
if (demuxer_found_hls_) {
// HLS manifests might pull segments from a different origin. We can't know
// for sure, so we conservatively say no here.
return false;
}
if (data_source_) if (data_source_)
return data_source_->HasSingleOrigin(); return data_source_->HasSingleOrigin();
return true; return true;
...@@ -1530,6 +1536,8 @@ void WebMediaPlayerImpl::OnError(PipelineStatus status) { ...@@ -1530,6 +1536,8 @@ void WebMediaPlayerImpl::OnError(PipelineStatus status) {
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
if (status == PipelineStatus::DEMUXER_ERROR_DETECTED_HLS) { if (status == PipelineStatus::DEMUXER_ERROR_DETECTED_HLS) {
demuxer_found_hls_ = true;
renderer_factory_selector_->SetUseMediaPlayer(true); renderer_factory_selector_->SetUseMediaPlayer(true);
pipeline_controller_.Stop(); pipeline_controller_.Stop();
......
...@@ -788,6 +788,11 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl ...@@ -788,6 +788,11 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
// removing |cast_impl_|. // removing |cast_impl_|.
bool using_media_player_renderer_ = false; bool using_media_player_renderer_ = false;
// Set whenever the demuxer encounters an HLS file.
// This flag is distinct from |using_media_player_renderer_|, because on older
// devices we might use MediaPlayerRenderer for non HLS playback.
bool demuxer_found_hls_ = false;
// Called sometime after the media is suspended in a playing state in // Called sometime after the media is suspended in a playing state in
// OnFrameHidden(), causing the state to change to paused. // OnFrameHidden(), causing the state to change to paused.
base::OneShotTimer background_pause_timer_; base::OneShotTimer background_pause_timer_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment