Index: media/cdm/default_cdm_factory.cc |
diff --git a/media/cdm/default_cdm_factory.cc b/media/cdm/default_cdm_factory.cc |
index a87760c1284ee777045d08c1ae053bf713948935..202f3cdcf21d643c2c4c400e85a70f3119e801f3 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 |