Chromium Code Reviews| Index: content/renderer/media/webmediaplayer_impl.cc |
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc |
| index 09633bde08c4e972a6b4742d67ba4a5bf90ac9bd..51a48dd0855596cbaf2d8b27c72504f888222279 100644 |
| --- a/content/renderer/media/webmediaplayer_impl.cc |
| +++ b/content/renderer/media/webmediaplayer_impl.cc |
| @@ -61,6 +61,7 @@ |
| #include "media/filters/video_renderer_impl.h" |
| #include "media/filters/vpx_video_decoder.h" |
| #include "third_party/WebKit/public/platform/WebContentDecryptionModule.h" |
| +#include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h" |
| #include "third_party/WebKit/public/platform/WebMediaSource.h" |
| #include "third_party/WebKit/public/platform/WebRect.h" |
| #include "third_party/WebKit/public/platform/WebSize.h" |
| @@ -135,6 +136,10 @@ class SyncPointClientImpl : public media::VideoFrame::SyncPointClient { |
| blink::WebGraphicsContext3D* web_graphics_context_; |
| }; |
| +// Used for calls to decryptor_ready_cb where the result can be ignored. |
| +void DoNothing(bool) { |
| +} |
| + |
| } // namespace |
| namespace content { |
| @@ -771,7 +776,7 @@ WebMediaPlayerImpl::GenerateKeyRequestInternal(const std::string& key_system, |
| if (proxy_decryptor_ && !decryptor_ready_cb_.is_null()) { |
| base::ResetAndReturn(&decryptor_ready_cb_) |
| - .Run(proxy_decryptor_->GetDecryptor()); |
| + .Run(proxy_decryptor_->GetDecryptor(), base::Bind(DoNothing)); |
| } |
| current_key_system_ = key_system; |
| @@ -884,7 +889,57 @@ void WebMediaPlayerImpl::setContentDecryptionModule( |
| web_cdm_ = ToWebContentDecryptionModuleImpl(cdm); |
| if (web_cdm_ && !decryptor_ready_cb_.is_null()) |
| - base::ResetAndReturn(&decryptor_ready_cb_).Run(web_cdm_->GetDecryptor()); |
| + base::ResetAndReturn(&decryptor_ready_cb_) |
| + .Run(web_cdm_->GetDecryptor(), base::Bind(DoNothing)); |
| +} |
| + |
| +void WebMediaPlayerImpl::setContentDecryptionModule( |
| + blink::WebContentDecryptionModule* cdm, |
| + blink::WebContentDecryptionModuleResult result) { |
| + DCHECK(main_loop_->BelongsToCurrentThread()); |
| + |
| + // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324 |
| + if (!cdm) { |
| + result.completeWithError( |
| + blink::WebContentDecryptionModuleExceptionNotSupportedError, |
| + 0, |
| + "Null MediaKeys object is not supported."); |
| + return; |
| + } |
| + |
| + web_cdm_ = ToWebContentDecryptionModuleImpl(cdm); |
| + |
| + if (web_cdm_ && !decryptor_ready_cb_.is_null()) { |
| + base::ResetAndReturn(&decryptor_ready_cb_) |
| + .Run(web_cdm_->GetDecryptor(), |
| + BIND_TO_RENDER_LOOP1( |
| + &WebMediaPlayerImpl::ContentDecryptionModuleAttached, result)); |
| + } else { |
| + // No pipeline/decoder connected, so resolve the promise. When something |
| + // is connected, setting the CDM will happen in SetDecryptorReadyCB(). |
| + ContentDecryptionModuleAttached(result, true); |
| + } |
| +} |
| + |
| +void WebMediaPlayerImpl::setContentDecryptionModuleSync( |
| + blink::WebContentDecryptionModule* cdm) { |
| + // Used when loading media and no pipeline/decoder attached yet. |
|
ddorwin
2014/08/08 21:15:26
this probably goes down one line
jrummell
2014/08/08 23:39:59
Done.
|
| + DCHECK(main_loop_->BelongsToCurrentThread()); |
| + DCHECK(decryptor_ready_cb_.is_null()); |
| + |
| + web_cdm_ = ToWebContentDecryptionModuleImpl(cdm); |
| +} |
| + |
| +void WebMediaPlayerImpl::ContentDecryptionModuleAttached( |
| + blink::WebContentDecryptionModuleResult result, |
| + bool success) { |
| + if (success) |
| + result.complete(); |
| + else |
| + result.completeWithError( |
| + blink::WebContentDecryptionModuleExceptionNotSupportedError, |
| + 0, |
| + "Unable to set MediaKeys object"); |
| } |
| void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed, |
| @@ -1276,7 +1331,8 @@ void WebMediaPlayerImpl::SetDecryptorReadyCB( |
| // Cancels the previous decryptor request. |
| if (decryptor_ready_cb.is_null()) { |
| if (!decryptor_ready_cb_.is_null()) |
| - base::ResetAndReturn(&decryptor_ready_cb_).Run(NULL); |
| + base::ResetAndReturn(&decryptor_ready_cb_) |
| + .Run(NULL, base::Bind(DoNothing)); |
| return; |
| } |
| @@ -1291,12 +1347,13 @@ void WebMediaPlayerImpl::SetDecryptorReadyCB( |
| DCHECK(!proxy_decryptor_ || !web_cdm_); |
| if (proxy_decryptor_) { |
| - decryptor_ready_cb.Run(proxy_decryptor_->GetDecryptor()); |
| + decryptor_ready_cb.Run(proxy_decryptor_->GetDecryptor(), |
| + base::Bind(DoNothing)); |
| return; |
| } |
| if (web_cdm_) { |
| - decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); |
| + decryptor_ready_cb.Run(web_cdm_->GetDecryptor(), base::Bind(DoNothing)); |
| return; |
| } |