diff options
-rw-r--r-- | content/renderer/media/android/webmediaplayer_android.cc | 23 | ||||
-rw-r--r-- | content/renderer/media/android/webmediaplayer_android.h | 3 | ||||
-rw-r--r-- | content/renderer/media/crypto/encrypted_media_player_support_impl.cc | 16 | ||||
-rw-r--r-- | content/renderer/media/crypto/encrypted_media_player_support_impl.h | 5 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 19 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 9 | ||||
-rw-r--r-- | media/blink/encrypted_media_player_support.h | 4 | ||||
-rw-r--r-- | media/blink/null_encrypted_media_player_support.cc | 8 | ||||
-rw-r--r-- | media/blink/null_encrypted_media_player_support.h | 4 | ||||
-rw-r--r-- | media/blink/webmediaplayer_impl.cc | 7 | ||||
-rw-r--r-- | media/blink/webmediaplayer_impl.h | 4 | ||||
-rw-r--r-- | media/blink/webmediaplayer_params.cc | 20 | ||||
-rw-r--r-- | media/blink/webmediaplayer_params.h | 10 | ||||
-rw-r--r-- | mojo/services/html_viewer/webmediaplayer_factory.cc | 3 |
14 files changed, 71 insertions, 64 deletions
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc index 53accf2..ea6ba1f 100644 --- a/content/renderer/media/android/webmediaplayer_android.cc +++ b/content/renderer/media/android/webmediaplayer_android.cc @@ -115,6 +115,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( base::WeakPtr<media::WebMediaPlayerDelegate> delegate, RendererMediaPlayerManager* player_manager, RendererCdmManager* cdm_manager, + blink::WebContentDecryptionModule* initial_cdm, scoped_refptr<StreamTextureFactory> factory, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, media::MediaLog* media_log) @@ -173,6 +174,13 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( #endif // defined(VIDEO_HOLE) TryCreateStreamTextureProxyIfNeeded(); interpolator_.SetUpperBound(base::TimeDelta()); + + // Set the initial CDM, if specified. + if (initial_cdm) { + web_cdm_ = ToWebContentDecryptionModuleImpl(initial_cdm); + if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) + player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); + } } WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { @@ -1674,21 +1682,6 @@ void WebMediaPlayerAndroid::setContentDecryptionModule( player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); } -void WebMediaPlayerAndroid::setContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) { - DCHECK(main_thread_checker_.CalledOnValidThread()); - - // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324 - if (!cdm) - return; - - DCHECK(decryptor_ready_cb_.is_null()); - - web_cdm_ = ToWebContentDecryptionModuleImpl(cdm); - if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) - player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); -} - void WebMediaPlayerAndroid::ContentDecryptionModuleAttached( blink::WebContentDecryptionModuleResult result, bool success) { diff --git a/content/renderer/media/android/webmediaplayer_android.h b/content/renderer/media/android/webmediaplayer_android.h index 8ed1ad6..1a27977 100644 --- a/content/renderer/media/android/webmediaplayer_android.h +++ b/content/renderer/media/android/webmediaplayer_android.h @@ -87,6 +87,7 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer, base::WeakPtr<media::WebMediaPlayerDelegate> delegate, RendererMediaPlayerManager* player_manager, RendererCdmManager* cdm_manager, + blink::WebContentDecryptionModule* initial_cdm, scoped_refptr<StreamTextureFactory> factory, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, media::MediaLog* media_log); @@ -247,8 +248,6 @@ class WebMediaPlayerAndroid : public blink::WebMediaPlayer, virtual void setContentDecryptionModule( blink::WebContentDecryptionModule* cdm, blink::WebContentDecryptionModuleResult result); - virtual void setContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm); void OnKeyAdded(const std::string& session_id); void OnKeyError(const std::string& session_id, diff --git a/content/renderer/media/crypto/encrypted_media_player_support_impl.cc b/content/renderer/media/crypto/encrypted_media_player_support_impl.cc index c884cd6..42f86b6 100644 --- a/content/renderer/media/crypto/encrypted_media_player_support_impl.cc +++ b/content/renderer/media/crypto/encrypted_media_player_support_impl.cc @@ -296,6 +296,14 @@ EncryptedMediaPlayerSupportImpl::CancelKeyRequestInternal( return WebMediaPlayer::MediaKeyExceptionNoError; } +void EncryptedMediaPlayerSupportImpl::SetInitialContentDecryptionModule( + blink::WebContentDecryptionModule* initial_cdm) { + // Used when loading media and no pipeline/decoder attached yet. + DCHECK(decryptor_ready_cb_.is_null()); + + web_cdm_ = ToWebContentDecryptionModuleImpl(initial_cdm); +} + void EncryptedMediaPlayerSupportImpl::SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm) { // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324 @@ -335,14 +343,6 @@ void EncryptedMediaPlayerSupportImpl::SetContentDecryptionModule( } } -void EncryptedMediaPlayerSupportImpl::SetContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) { - // Used when loading media and no pipeline/decoder attached yet. - DCHECK(decryptor_ready_cb_.is_null()); - - web_cdm_ = ToWebContentDecryptionModuleImpl(cdm); -} - void EncryptedMediaPlayerSupportImpl::ContentDecryptionModuleAttached( blink::WebContentDecryptionModuleResult result, bool success) { diff --git a/content/renderer/media/crypto/encrypted_media_player_support_impl.h b/content/renderer/media/crypto/encrypted_media_player_support_impl.h index f0299d8..788747f4 100644 --- a/content/renderer/media/crypto/encrypted_media_player_support_impl.h +++ b/content/renderer/media/crypto/encrypted_media_player_support_impl.h @@ -48,13 +48,14 @@ class EncryptedMediaPlayerSupportImpl const blink::WebString& key_system, const blink::WebString& session_id) OVERRIDE; + virtual void SetInitialContentDecryptionModule( + blink::WebContentDecryptionModule* initial_cdm) OVERRIDE; + virtual void SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm) OVERRIDE; virtual void SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm, blink::WebContentDecryptionModuleResult result) OVERRIDE; - virtual void SetContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) OVERRIDE; virtual media::SetDecryptorReadyCB CreateSetDecryptorReadyCB() OVERRIDE; virtual media::Demuxer::NeedKeyCB CreateNeedKeyCB() OVERRIDE; diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 7d8e11e..65b9a78 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -1603,6 +1603,14 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( blink::WebLocalFrame* frame, const blink::WebURL& url, blink::WebMediaPlayerClient* client) { + return createMediaPlayer(frame, url, client, NULL); +} + +blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( + blink::WebLocalFrame* frame, + const blink::WebURL& url, + blink::WebMediaPlayerClient* client, + blink::WebContentDecryptionModule* initial_cdm) { #if defined(VIDEO_HOLE) if (!contains_media_player_) { render_view_->RegisterVideoHoleFrame(this); @@ -1616,7 +1624,7 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( return CreateWebMediaPlayerForMediaStream(url, client); #if defined(OS_ANDROID) - return CreateAndroidWebMediaPlayer(url, client); + return CreateAndroidWebMediaPlayer(url, client, initial_cdm); #else RenderThreadImpl* render_thread = RenderThreadImpl::current(); media::WebMediaPlayerParams params( @@ -1630,7 +1638,8 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( render_thread->GetGpuFactories(), render_thread->GetMediaThreadTaskRunner(), render_thread->compositor_message_loop_proxy(), - base::Bind(&EncryptedMediaPlayerSupportImpl::Create)); + base::Bind(&EncryptedMediaPlayerSupportImpl::Create), + initial_cdm); return new media::WebMediaPlayerImpl(frame, client, weak_factory_.GetWeakPtr(), @@ -3857,8 +3866,9 @@ GURL RenderFrameImpl::GetLoadingUrl() const { #if defined(OS_ANDROID) WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( - const blink::WebURL& url, - WebMediaPlayerClient* client) { + const blink::WebURL& url, + WebMediaPlayerClient* client, + blink::WebContentDecryptionModule* initial_cdm) { GpuChannelHost* gpu_channel_host = RenderThreadImpl::current()->EstablishGpuChannelSync( CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE); @@ -3890,6 +3900,7 @@ WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( weak_factory_.GetWeakPtr(), GetMediaPlayerManager(), GetCdmManager(), + initial_cdm, stream_texture_factory, RenderThreadImpl::current()->GetMediaThreadTaskRunner(), new RenderMediaLog()); diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index be85ce9..e80c4af 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -272,10 +272,16 @@ class CONTENT_EXPORT RenderFrameImpl // blink::WebFrameClient implementation: virtual blink::WebPlugin* createPlugin(blink::WebLocalFrame* frame, const blink::WebPluginParams& params); + // TODO(jrummell): Remove this method once blink updated. virtual blink::WebMediaPlayer* createMediaPlayer( blink::WebLocalFrame* frame, const blink::WebURL& url, blink::WebMediaPlayerClient* client); + virtual blink::WebMediaPlayer* createMediaPlayer( + blink::WebLocalFrame* frame, + const blink::WebURL& url, + blink::WebMediaPlayerClient* client, + blink::WebContentDecryptionModule* initial_cdm); virtual blink::WebContentDecryptionModule* createContentDecryptionModule( blink::WebLocalFrame* frame, const blink::WebSecurityOrigin& security_origin, @@ -617,7 +623,8 @@ class CONTENT_EXPORT RenderFrameImpl #if defined(OS_ANDROID) blink::WebMediaPlayer* CreateAndroidWebMediaPlayer( const blink::WebURL& url, - blink::WebMediaPlayerClient* client); + blink::WebMediaPlayerClient* client, + blink::WebContentDecryptionModule* initial_cdm); RendererMediaPlayerManager* GetMediaPlayerManager(); #endif diff --git a/media/blink/encrypted_media_player_support.h b/media/blink/encrypted_media_player_support.h index b387686..737720d 100644 --- a/media/blink/encrypted_media_player_support.h +++ b/media/blink/encrypted_media_player_support.h @@ -46,13 +46,13 @@ class MEDIA_EXPORT EncryptedMediaPlayerSupport { // Unprefixed API methods. + virtual void SetInitialContentDecryptionModule( + blink::WebContentDecryptionModule* initial_cdm) = 0; virtual void SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm) = 0; virtual void SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm, blink::WebContentDecryptionModuleResult result) = 0; - virtual void SetContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) = 0; // Callback factory and notification methods used by WebMediaPlayerImpl. diff --git a/media/blink/null_encrypted_media_player_support.cc b/media/blink/null_encrypted_media_player_support.cc index 035785b..a67893b 100644 --- a/media/blink/null_encrypted_media_player_support.cc +++ b/media/blink/null_encrypted_media_player_support.cc @@ -48,6 +48,10 @@ NullEncryptedMediaPlayerSupport::CancelKeyRequest( return blink::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; } +void NullEncryptedMediaPlayerSupport::SetInitialContentDecryptionModule( + blink::WebContentDecryptionModule* initial_cdm) { +} + void NullEncryptedMediaPlayerSupport::SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm) { } @@ -61,10 +65,6 @@ void NullEncryptedMediaPlayerSupport::SetContentDecryptionModule( "Null MediaKeys object is not supported."); } -void NullEncryptedMediaPlayerSupport::SetContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) { -} - Demuxer::NeedKeyCB NullEncryptedMediaPlayerSupport::CreateNeedKeyCB() { return Demuxer::NeedKeyCB(); } diff --git a/media/blink/null_encrypted_media_player_support.h b/media/blink/null_encrypted_media_player_support.h index 140bef1..615b893 100644 --- a/media/blink/null_encrypted_media_player_support.h +++ b/media/blink/null_encrypted_media_player_support.h @@ -42,13 +42,13 @@ class MEDIA_EXPORT NullEncryptedMediaPlayerSupport // Unprefixed API methods. + virtual void SetInitialContentDecryptionModule( + blink::WebContentDecryptionModule* initial_cdm) OVERRIDE; virtual void SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm) OVERRIDE; virtual void SetContentDecryptionModule( blink::WebContentDecryptionModule* cdm, blink::WebContentDecryptionModuleResult result) OVERRIDE; - virtual void SetContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) OVERRIDE; // Callback factory and notification methods used by WebMediaPlayerImpl. diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index 0fd74e8..c79ee7a 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc @@ -679,13 +679,6 @@ void WebMediaPlayerImpl::setContentDecryptionModule( encrypted_media_support_->SetContentDecryptionModule(cdm, result); } -void WebMediaPlayerImpl::setContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm) { - DCHECK(main_task_runner_->BelongsToCurrentThread()); - - encrypted_media_support_->SetContentDecryptionModuleSync(cdm); -} - void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed, PipelineStatus status) { DVLOG(1) << __FUNCTION__ << "(" << time_changed << ", " << status << ")"; diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index bbdf080..3dc778f 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h @@ -155,14 +155,12 @@ class MEDIA_EXPORT WebMediaPlayerImpl const blink::WebString& session_id); // TODO(jrummell): Remove this method once Blink updated to use the other - // two methods. + // method. virtual void setContentDecryptionModule( blink::WebContentDecryptionModule* cdm); virtual void setContentDecryptionModule( blink::WebContentDecryptionModule* cdm, blink::WebContentDecryptionModuleResult result); - virtual void setContentDecryptionModuleSync( - blink::WebContentDecryptionModule* cdm); void OnPipelineSeeked(bool time_changed, PipelineStatus status); void OnPipelineEnded(); diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc index c157e34..1fd2b8a 100644 --- a/media/blink/webmediaplayer_params.cc +++ b/media/blink/webmediaplayer_params.cc @@ -17,12 +17,11 @@ WebMediaPlayerParams::WebMediaPlayerParams( const AudioHardwareConfig& audio_hardware_config, const scoped_refptr<MediaLog>& media_log, const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories, - const scoped_refptr<base::SingleThreadTaskRunner>& - media_task_runner, - const scoped_refptr<base::SingleThreadTaskRunner>& - compositor_task_runner, - const EncryptedMediaPlayerSupportCreateCB& - encrypted_media_player_support_cb) + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, + const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, + const EncryptedMediaPlayerSupportCreateCB& + encrypted_media_player_support_cb, + blink::WebContentDecryptionModule* initial_cdm) : defer_load_cb_(defer_load_cb), audio_renderer_sink_(audio_renderer_sink), audio_hardware_config_(audio_hardware_config), @@ -30,7 +29,8 @@ WebMediaPlayerParams::WebMediaPlayerParams( gpu_factories_(gpu_factories), media_task_runner_(media_task_runner), compositor_task_runner_(compositor_task_runner), - encrypted_media_player_support_cb_(encrypted_media_player_support_cb) { + encrypted_media_player_support_cb_(encrypted_media_player_support_cb), + initial_cdm_(initial_cdm) { } WebMediaPlayerParams::~WebMediaPlayerParams() {} @@ -38,7 +38,11 @@ WebMediaPlayerParams::~WebMediaPlayerParams() {} scoped_ptr<EncryptedMediaPlayerSupport> WebMediaPlayerParams::CreateEncryptedMediaPlayerSupport( blink::WebMediaPlayerClient* client) const { - return encrypted_media_player_support_cb_.Run(client); + scoped_ptr<EncryptedMediaPlayerSupport> encrypted_media_support = + encrypted_media_player_support_cb_.Run(client); + if (encrypted_media_support) + encrypted_media_support->SetInitialContentDecryptionModule(initial_cdm_); + return encrypted_media_support.Pass(); } } // namespace media diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h index 7bd3ddb..c765548 100644 --- a/media/blink/webmediaplayer_params.h +++ b/media/blink/webmediaplayer_params.h @@ -42,12 +42,11 @@ class MEDIA_EXPORT WebMediaPlayerParams { const AudioHardwareConfig& audio_hardware_config, const scoped_refptr<MediaLog>& media_log, const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories, - const scoped_refptr<base::SingleThreadTaskRunner>& - media_task_runner, - const scoped_refptr<base::SingleThreadTaskRunner>& - compositor_task_runner, + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, + const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, const EncryptedMediaPlayerSupportCreateCB& - encrypted_media_player_support_cb); + encrypted_media_player_support_cb, + blink::WebContentDecryptionModule* initial_cdm); ~WebMediaPlayerParams(); @@ -94,6 +93,7 @@ class MEDIA_EXPORT WebMediaPlayerParams { scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; EncryptedMediaPlayerSupportCreateCB encrypted_media_player_support_cb_; + blink::WebContentDecryptionModule* initial_cdm_; DISALLOW_IMPLICIT_CONSTRUCTORS(WebMediaPlayerParams); }; diff --git a/mojo/services/html_viewer/webmediaplayer_factory.cc b/mojo/services/html_viewer/webmediaplayer_factory.cc index e5309a9..bbf8c81 100644 --- a/mojo/services/html_viewer/webmediaplayer_factory.cc +++ b/mojo/services/html_viewer/webmediaplayer_factory.cc @@ -56,7 +56,8 @@ blink::WebMediaPlayer* WebMediaPlayerFactory::CreateMediaPlayer( scoped_refptr<media::GpuVideoAcceleratorFactories>(), GetMediaThreadTaskRunner(), compositor_task_runner_, - base::Bind(&media::NullEncryptedMediaPlayerSupport::Create)); + base::Bind(&media::NullEncryptedMediaPlayerSupport::Create), + NULL); base::WeakPtr<media::WebMediaPlayerDelegate> delegate; return new media::WebMediaPlayerImpl(frame, client, delegate, params); |