diff options
Diffstat (limited to 'media/cdm/default_cdm_factory.cc')
-rw-r--r-- | media/cdm/default_cdm_factory.cc | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/media/cdm/default_cdm_factory.cc b/media/cdm/default_cdm_factory.cc index a87760c..202f3cd 100644 --- a/media/cdm/default_cdm_factory.cc +++ b/media/cdm/default_cdm_factory.cc @@ -4,6 +4,10 @@ #include "media/cdm/default_cdm_factory.h" +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/location.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" @@ -16,7 +20,7 @@ DefaultCdmFactory::DefaultCdmFactory() { DefaultCdmFactory::~DefaultCdmFactory() { } -scoped_ptr<MediaKeys> DefaultCdmFactory::Create( +void DefaultCdmFactory::Create( const std::string& key_system, bool allow_distinctive_identifier, bool allow_persistent_state, @@ -25,17 +29,19 @@ scoped_ptr<MediaKeys> DefaultCdmFactory::Create( const SessionClosedCB& session_closed_cb, const LegacySessionErrorCB& legacy_session_error_cb, const SessionKeysChangeCB& session_keys_change_cb, - const SessionExpirationUpdateCB& session_expiration_update_cb) { - if (!security_origin.is_valid()) - return nullptr; - - if (CanUseAesDecryptor(key_system)) { - return make_scoped_ptr(new AesDecryptor(security_origin, session_message_cb, - session_closed_cb, - session_keys_change_cb)); + const SessionExpirationUpdateCB& session_expiration_update_cb, + const CdmCreatedCB& cdm_created_cb) { + if (!security_origin.is_valid() || !CanUseAesDecryptor(key_system)) { + base::MessageLoopProxy::current()->PostTask( + FROM_HERE, base::Bind(cdm_created_cb, nullptr)); + return; } - return nullptr; + scoped_ptr<MediaKeys> cdm( + new AesDecryptor(security_origin, session_message_cb, session_closed_cb, + session_keys_change_cb)); + base::MessageLoopProxy::current()->PostTask( + FROM_HERE, base::Bind(cdm_created_cb, base::Passed(&cdm))); } } // namespace media |