Chromium Code Reviews| Index: content/renderer/media/crypto/render_cdm_factory.cc |
| diff --git a/content/renderer/media/crypto/render_cdm_factory.cc b/content/renderer/media/crypto/render_cdm_factory.cc |
| index c871f9c2d551ae31e2be7e06ffcb2579b8c61853..23c335ff59759813b0cd89640ed60eae09541e4e 100644 |
| --- a/content/renderer/media/crypto/render_cdm_factory.cc |
| +++ b/content/renderer/media/crypto/render_cdm_factory.cc |
| @@ -4,11 +4,13 @@ |
| #include "content/renderer/media/crypto/render_cdm_factory.h" |
| +#include "base/bind.h" |
| +#include "base/location.h" |
| #include "base/logging.h" |
| +#include "base/message_loop/message_loop_proxy.h" |
| #include "media/base/key_systems.h" |
| #include "media/cdm/aes_decryptor.h" |
| #include "url/gurl.h" |
| - |
| #if defined(ENABLE_PEPPER_CDMS) |
| #include "content/renderer/media/crypto/ppapi_decryptor.h" |
| #elif defined(ENABLE_BROWSER_CDMS) |
| @@ -37,7 +39,7 @@ RenderCdmFactory::~RenderCdmFactory() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| } |
| -scoped_ptr<media::MediaKeys> RenderCdmFactory::Create( |
| +void RenderCdmFactory::Create( |
| const std::string& key_system, |
| bool allow_distinctive_identifier, |
| bool allow_persistent_state, |
| @@ -46,38 +48,45 @@ scoped_ptr<media::MediaKeys> RenderCdmFactory::Create( |
| const media::SessionClosedCB& session_closed_cb, |
| const media::LegacySessionErrorCB& legacy_session_error_cb, |
| const media::SessionKeysChangeCB& session_keys_change_cb, |
| - const media::SessionExpirationUpdateCB& session_expiration_update_cb) { |
| + const media::SessionExpirationUpdateCB& session_expiration_update_cb, |
| + const CdmCreatedCB& cdm_created_cb) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| - if (!security_origin.is_valid()) |
| - return nullptr; |
| + scoped_ptr<media::MediaKeys> cdm; |
| + |
| + if (!security_origin.is_valid()) { |
| + base::MessageLoopProxy::current()->PostTask( |
| + FROM_HERE, base::Bind(cdm_created_cb, base::Passed(&cdm))); |
|
ddorwin
2015/04/10 00:59:43
nit: Does nullptr not work here? (It's a bit weird
xhwang
2015/04/10 17:41:17
Done.
|
| + return; |
| + } |
| if (media::CanUseAesDecryptor(key_system)) { |
| // TODO(sandersd): Currently the prefixed API always allows distinctive |
| // identifiers and persistent state. Once that changes we can sanity check |
| // here that neither is allowed for AesDecryptor, since it does not support |
| // them and should never be configured that way. http://crbug.com/455271 |
| - return scoped_ptr<media::MediaKeys>( |
| - new media::AesDecryptor(security_origin, session_message_cb, |
| - session_closed_cb, session_keys_change_cb)); |
| - } |
| - |
| + cdm.reset(new media::AesDecryptor(security_origin, session_message_cb, |
| + session_closed_cb, |
| + session_keys_change_cb)); |
| + } else { |
| #if defined(ENABLE_PEPPER_CDMS) |
| - return scoped_ptr<media::MediaKeys>(PpapiDecryptor::Create( |
| - key_system, allow_distinctive_identifier, allow_persistent_state, |
| - security_origin, create_pepper_cdm_cb_, session_message_cb, |
| - session_closed_cb, legacy_session_error_cb, session_keys_change_cb, |
| - session_expiration_update_cb)); |
| + cdm = PpapiDecryptor::Create( |
| + key_system, allow_distinctive_identifier, allow_persistent_state, |
| + security_origin, create_pepper_cdm_cb_, session_message_cb, |
| + session_closed_cb, legacy_session_error_cb, session_keys_change_cb, |
| + session_expiration_update_cb); |
| #elif defined(ENABLE_BROWSER_CDMS) |
| - DCHECK(allow_distinctive_identifier); |
| - DCHECK(allow_persistent_state); |
| - return scoped_ptr<media::MediaKeys>(ProxyMediaKeys::Create( |
| - key_system, security_origin, manager_, session_message_cb, |
| - session_closed_cb, legacy_session_error_cb, session_keys_change_cb, |
| - session_expiration_update_cb)); |
| -#else |
| - return nullptr; |
| + DCHECK(allow_distinctive_identifier); |
| + DCHECK(allow_persistent_state); |
| + cdm = ProxyMediaKeys::Create( |
| + key_system, security_origin, manager_, session_message_cb, |
| + session_closed_cb, legacy_session_error_cb, session_keys_change_cb, |
| + session_expiration_update_cb); |
| #endif // defined(ENABLE_PEPPER_CDMS) |
| + } |
| + |
| + base::MessageLoopProxy::current()->PostTask( |
| + FROM_HERE, base::Bind(cdm_created_cb, base::Passed(&cdm))); |
| } |
| } // namespace content |