Index: media/mojo/services/mojo_cdm_service.cc |
diff --git a/media/mojo/services/mojo_cdm_service.cc b/media/mojo/services/mojo_cdm_service.cc |
index 926535bfccb3159c600f65f9d8e7468f82460512..9a805f0632d2ed3d8ac2ba14382d46ce695e38d6 100644 |
--- a/media/mojo/services/mojo_cdm_service.cc |
+++ b/media/mojo/services/mojo_cdm_service.cc |
@@ -10,6 +10,7 @@ |
#include "media/cdm/aes_decryptor.h" |
#include "media/mojo/services/media_type_converters.h" |
#include "media/mojo/services/mojo_cdm_promise.h" |
+#include "media/mojo/services/mojo_cdm_service_context.h" |
#include "mojo/common/common_type_converters.h" |
#include "mojo/common/url_type_converters.h" |
#include "url/gurl.h" |
@@ -19,23 +20,32 @@ namespace media { |
typedef MojoCdmPromise<> SimpleMojoCdmPromise; |
typedef MojoCdmPromise<std::string> NewSessionMojoCdmPromise; |
+MojoCdmService* MojoCdmService::Create( |
+ MojoCdmServiceContext* context, |
+ const mojo::String& key_system, |
+ mojo::InterfaceRequest<mojo::ContentDecryptionModule> request) { |
+ // Only AesDecryptor is supported. |
+ if (!CanUseAesDecryptor(key_system)) |
+ return nullptr; |
+ |
+ return new MojoCdmService(context, key_system, request.Pass()); |
+} |
+ |
MojoCdmService::MojoCdmService( |
+ MojoCdmServiceContext* context, |
const mojo::String& key_system, |
mojo::InterfaceRequest<mojo::ContentDecryptionModule> request) |
- : binding_(this, request.Pass()), weak_factory_(this) { |
- base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr(); |
- |
- if (CanUseAesDecryptor(key_system)) { |
- // TODO(jrummell): Determine proper origin. |
- cdm_.reset(new AesDecryptor( |
- GURL::EmptyGURL(), |
- base::Bind(&MojoCdmService::OnSessionMessage, weak_this), |
- base::Bind(&MojoCdmService::OnSessionClosed, weak_this), |
- base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this))); |
- } |
+ : binding_(this, request.Pass()), context_(context), weak_factory_(this) { |
+ DVLOG(1) << __FUNCTION__ << ": " << key_system; |
+ DCHECK(CanUseAesDecryptor(key_system)); |
- // TODO(xhwang): Check key system support in the app. |
- NOTREACHED(); |
+ base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr(); |
+ // TODO(jrummell): Determine proper origin. |
+ cdm_.reset(new AesDecryptor( |
+ GURL::EmptyGURL(), |
+ base::Bind(&MojoCdmService::OnSessionMessage, weak_this), |
+ base::Bind(&MojoCdmService::OnSessionClosed, weak_this), |
+ base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this))); |
} |
MojoCdmService::~MojoCdmService() { |
@@ -49,9 +59,10 @@ void MojoCdmService::SetClient(mojo::ContentDecryptionModuleClientPtr client) { |
void MojoCdmService::SetServerCertificate( |
mojo::Array<uint8_t> certificate_data, |
const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) { |
+ DVLOG(2) << __FUNCTION__; |
cdm_->SetServerCertificate( |
certificate_data.storage(), |
- scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback))); |
+ make_scoped_ptr(new SimpleMojoCdmPromise(callback))); |
} |
void MojoCdmService::CreateSessionAndGenerateRequest( |
@@ -60,10 +71,11 @@ void MojoCdmService::CreateSessionAndGenerateRequest( |
mojo::Array<uint8_t> init_data, |
const mojo::Callback<void(mojo::CdmPromiseResultPtr, mojo::String)>& |
callback) { |
+ DVLOG(2) << __FUNCTION__; |
cdm_->CreateSessionAndGenerateRequest( |
static_cast<MediaKeys::SessionType>(session_type), |
static_cast<EmeInitDataType>(init_data_type), init_data.storage(), |
- scoped_ptr<NewSessionCdmPromise>(new NewSessionMojoCdmPromise(callback))); |
+ make_scoped_ptr(new NewSessionMojoCdmPromise(callback))); |
} |
void MojoCdmService::LoadSession( |
@@ -71,16 +83,17 @@ void MojoCdmService::LoadSession( |
const mojo::String& session_id, |
const mojo::Callback<void(mojo::CdmPromiseResultPtr, mojo::String)>& |
callback) { |
- cdm_->LoadSession( |
- static_cast<MediaKeys::SessionType>(session_type), |
- session_id.To<std::string>(), |
- scoped_ptr<NewSessionCdmPromise>(new NewSessionMojoCdmPromise(callback))); |
+ DVLOG(2) << __FUNCTION__; |
+ cdm_->LoadSession(static_cast<MediaKeys::SessionType>(session_type), |
+ session_id.To<std::string>(), |
+ make_scoped_ptr(new NewSessionMojoCdmPromise(callback))); |
} |
void MojoCdmService::UpdateSession( |
const mojo::String& session_id, |
mojo::Array<uint8_t> response, |
const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) { |
+ DVLOG(2) << __FUNCTION__; |
cdm_->UpdateSession( |
session_id.To<std::string>(), response.storage(), |
scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback))); |
@@ -89,29 +102,42 @@ void MojoCdmService::UpdateSession( |
void MojoCdmService::CloseSession( |
const mojo::String& session_id, |
const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) { |
- cdm_->CloseSession( |
- session_id.To<std::string>(), |
- scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback))); |
+ DVLOG(2) << __FUNCTION__; |
+ cdm_->CloseSession(session_id.To<std::string>(), |
+ make_scoped_ptr(new SimpleMojoCdmPromise(callback))); |
} |
void MojoCdmService::RemoveSession( |
const mojo::String& session_id, |
const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) { |
- cdm_->RemoveSession( |
- session_id.To<std::string>(), |
- scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback))); |
+ DVLOG(2) << __FUNCTION__; |
+ cdm_->RemoveSession(session_id.To<std::string>(), |
+ make_scoped_ptr(new SimpleMojoCdmPromise(callback))); |
} |
-void MojoCdmService::GetCdmContext( |
- int32_t cdm_id, |
+void MojoCdmService::GetDecryptor( |
mojo::InterfaceRequest<mojo::Decryptor> decryptor) { |
NOTIMPLEMENTED(); |
} |
+CdmContext* MojoCdmService::GetCdmContext() { |
+ DVLOG(2) << __FUNCTION__; |
+ return cdm_->GetCdmContext(); |
+} |
+ |
+void MojoCdmService::OnConnectionError() { |
+ DVLOG(2) << __FUNCTION__; |
+ context_->ServiceHadConnectionError(this); |
+ |
+ // The above call deleted this instance, so the only safe thing to do is |
+ // return. |
+} |
+ |
void MojoCdmService::OnSessionMessage(const std::string& session_id, |
MediaKeys::MessageType message_type, |
const std::vector<uint8_t>& message, |
const GURL& legacy_destination_url) { |
+ DVLOG(2) << __FUNCTION__; |
client_->OnSessionMessage(session_id, |
static_cast<mojo::CdmMessageType>(message_type), |
mojo::Array<uint8_t>::From(message), |
@@ -121,6 +147,7 @@ void MojoCdmService::OnSessionMessage(const std::string& session_id, |
void MojoCdmService::OnSessionKeysChange(const std::string& session_id, |
bool has_additional_usable_key, |
CdmKeysInfo keys_info) { |
+ DVLOG(2) << __FUNCTION__; |
mojo::Array<mojo::CdmKeyInformationPtr> keys_data; |
for (const auto& key : keys_info) |
keys_data.push_back(mojo::CdmKeyInformation::From(*key)); |
@@ -131,11 +158,13 @@ void MojoCdmService::OnSessionKeysChange(const std::string& session_id, |
void MojoCdmService::OnSessionExpirationUpdate( |
const std::string& session_id, |
const base::Time& new_expiry_time_sec) { |
+ DVLOG(2) << __FUNCTION__; |
client_->OnSessionExpirationUpdate(session_id, |
new_expiry_time_sec.ToDoubleT()); |
} |
void MojoCdmService::OnSessionClosed(const std::string& session_id) { |
+ DVLOG(2) << __FUNCTION__; |
client_->OnSessionClosed(session_id); |
} |
@@ -143,6 +172,7 @@ void MojoCdmService::OnLegacySessionError(const std::string& session_id, |
MediaKeys::Exception exception, |
uint32_t system_code, |
const std::string& error_message) { |
+ DVLOG(2) << __FUNCTION__; |
client_->OnLegacySessionError(session_id, |
static_cast<mojo::CdmException>(exception), |
system_code, error_message); |