Chromium Code Reviews| Index: content/browser/media/android/media_player_renderer.cc |
| diff --git a/content/browser/media/android/media_player_renderer.cc b/content/browser/media/android/media_player_renderer.cc |
| index 58d7bfa80db3b9234d48c3883738f18efd989b67..7e29cd4b27b7a3b1157a995a7bedc102ba78979d 100644 |
| --- a/content/browser/media/android/media_player_renderer.cc |
| +++ b/content/browser/media/android/media_player_renderer.cc |
| @@ -6,6 +6,7 @@ |
| #include <memory> |
| +#include "base/callback_helpers.h" |
| #include "content/browser/android/scoped_surface_request_manager.h" |
| #include "content/browser/media/android/media_resource_getter_impl.h" |
| #include "content/public/browser/browser_context.h" |
| @@ -14,6 +15,7 @@ |
| #include "content/public/browser/storage_partition.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/content_client.h" |
| +#include "media/base/android/media_service_throttler.h" |
| // TODO(tguilbert): Remove this ID once MediaPlayerManager has been deleted |
| // and MediaPlayerBridge updated. See comment in header file. |
| @@ -35,6 +37,12 @@ void MediaPlayerRenderer::Initialize( |
| media::RendererClient* client, |
| const media::PipelineStatusCB& init_cb) { |
| DVLOG(1) << __func__; |
| + |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + DCHECK(!pending_init_cb_); |
| + |
| + renderer_client_ = client; |
| + |
| if (demuxer_stream_provider->GetType() != |
| media::DemuxerStreamProvider::Type::URL) { |
| DLOG(ERROR) << "DemuxerStreamProvider is not of Type URL"; |
| @@ -42,9 +50,28 @@ void MediaPlayerRenderer::Initialize( |
| return; |
| } |
| - media::MediaUrlParams url_params = |
| - demuxer_stream_provider->GetMediaUrlParams(); |
| - renderer_client_ = client; |
| + pending_init_cb_ = init_cb; |
|
DaleCurtis
2016/11/11 23:32:15
Bind it into CreateMediaPlayer instead?
tguilbert
2016/11/14 23:18:07
Done.
|
| + |
| + base::TimeDelta creation_delay = |
| + media::MediaServiceThrottler::GetInstance()->GetDelayForClientCreation(); |
| + |
| + if (creation_delay.is_zero()) { |
| + CreateUnderlyingMediaPlayer(demuxer_stream_provider->GetMediaUrlParams()); |
| + return; |
| + } |
| + |
| + BrowserThread::PostDelayedTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&MediaPlayerRenderer::CreateUnderlyingMediaPlayer, |
| + weak_factory_.GetWeakPtr(), |
| + demuxer_stream_provider->GetMediaUrlParams()), |
| + creation_delay); |
| +} |
| + |
| +void MediaPlayerRenderer::CreateUnderlyingMediaPlayer( |
| + const media::MediaUrlParams& url_params) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + DCHECK(pending_init_cb_); |
| const std::string user_agent = GetContentClient()->GetUserAgent(); |
| @@ -58,7 +85,7 @@ void MediaPlayerRenderer::Initialize( |
| true)); // allow_crendentials |
| media_player_->Initialize(); |
| - init_cb.Run(media::PIPELINE_OK); |
| + base::ResetAndReturn(&pending_init_cb_).Run(media::PIPELINE_OK); |
| } |
| void MediaPlayerRenderer::SetCdm(media::CdmContext* cdm_context, |