Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(596)

Unified Diff: media/mojo/services/mojo_cdm_service.cc

Issue 840473002: media: Support creation and SetCdm() for mojo based CDM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 8b6673b9aae6a1c6a6219308b09168b5a04cb223..72a7b6d1faca7933fe52cdd8ed5b51fc0353d0f9 100644
--- a/media/mojo/services/mojo_cdm_service.cc
+++ b/media/mojo/services/mojo_cdm_service.cc
@@ -8,6 +8,7 @@
#include "media/base/key_systems.h"
#include "media/cdm/aes_decryptor.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"
namespace media {
@@ -16,18 +17,26 @@ typedef MojoCdmPromise<> SimpleMojoCdmPromise;
typedef MojoCdmPromise<std::string> NewSessionMojoCdmPromise;
typedef MojoCdmPromise<std::vector<std::vector<uint8_t>>> KeyIdsMojoCdmPromise;
-MojoCdmService::MojoCdmService(const mojo::String& key_system)
- : weak_factory_(this) {
- base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr();
- if (CanUseAesDecryptor(key_system)) {
- cdm_.reset(new AesDecryptor(
- base::Bind(&MojoCdmService::OnSessionMessage, weak_this),
- base::Bind(&MojoCdmService::OnSessionClosed, weak_this),
- base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this)));
- }
+MojoCdmService* MojoCdmService::Create(MojoCdmServiceContext* context,
+ const mojo::String& key_system) {
+ // Only AesDecryptor is supported.
+ if (!CanUseAesDecryptor(key_system))
+ return nullptr;
+
+ return new MojoCdmService(context, key_system);
+}
- // TODO(xhwang): Check key system support in the app.
- NOTREACHED();
+MojoCdmService::MojoCdmService(MojoCdmServiceContext* context,
+ const mojo::String& key_system)
+ : context_(context), weak_factory_(this) {
+ DVLOG(1) << __FUNCTION__ << ": " << key_system;
+ DCHECK(CanUseAesDecryptor(key_system));
+
+ base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr();
+ cdm_.reset(new AesDecryptor(
+ base::Bind(&MojoCdmService::OnSessionMessage, weak_this),
+ base::Bind(&MojoCdmService::OnSessionClosed, weak_this),
+ base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this)));
}
MojoCdmService::~MojoCdmService() {
@@ -37,12 +46,13 @@ MojoCdmService::~MojoCdmService() {
void MojoCdmService::SetServerCertificate(
mojo::Array<uint8_t> certificate_data,
const mojo::Callback<void(mojo::CdmPromiseResultPtr)>& callback) {
+ DVLOG(2) << __FUNCTION__;
const std::vector<uint8_t>& certificate_data_vector =
certificate_data.storage();
cdm_->SetServerCertificate(
certificate_data_vector.empty() ? nullptr : &certificate_data_vector[0],
certificate_data_vector.size(),
- scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback)));
+ make_scoped_ptr(new SimpleMojoCdmPromise(callback)));
}
void MojoCdmService::CreateSession(
@@ -51,78 +61,94 @@ void MojoCdmService::CreateSession(
mojo::ContentDecryptionModule::SessionType session_type,
const mojo::Callback<void(mojo::CdmPromiseResultPtr, mojo::String)>&
callback) {
+ DVLOG(2) << __FUNCTION__;
const std::vector<uint8_t>& init_data_vector = init_data.storage();
- cdm_->CreateSession(
- init_data_type.To<std::string>(),
- init_data_vector.empty() ? nullptr : &init_data_vector[0],
- init_data_vector.size(),
- static_cast<MediaKeys::SessionType>(session_type),
- scoped_ptr<NewSessionCdmPromise>(new NewSessionMojoCdmPromise(callback)));
+ cdm_->CreateSession(init_data_type.To<std::string>(),
+ init_data_vector.empty() ? nullptr : &init_data_vector[0],
+ init_data_vector.size(),
+ static_cast<MediaKeys::SessionType>(session_type),
+ make_scoped_ptr(new NewSessionMojoCdmPromise(callback)));
}
void MojoCdmService::LoadSession(
const mojo::String& session_id,
const mojo::Callback<void(mojo::CdmPromiseResultPtr, mojo::String)>&
callback) {
- cdm_->LoadSession(
- session_id.To<std::string>(),
- scoped_ptr<NewSessionCdmPromise>(new NewSessionMojoCdmPromise(callback)));
+ DVLOG(2) << __FUNCTION__;
+ cdm_->LoadSession(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__;
const std::vector<uint8_t>& response_vector = response.storage();
- cdm_->UpdateSession(
- session_id.To<std::string>(),
- response_vector.empty() ? nullptr : &response_vector[0],
- response_vector.size(),
- scoped_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback)));
+ cdm_->UpdateSession(session_id.To<std::string>(),
+ response_vector.empty() ? nullptr : &response_vector[0],
+ response_vector.size(),
+ make_scoped_ptr(new SimpleMojoCdmPromise(callback)));
}
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,
const std::vector<uint8_t>& message,
const GURL& destination_url) {
+ DVLOG(2) << __FUNCTION__;
client()->OnSessionMessage(session_id, mojo::Array<uint8_t>::From(message),
mojo::String::From(destination_url));
}
void MojoCdmService::OnSessionKeysChange(const std::string& session_id,
bool has_additional_usable_key) {
+ DVLOG(2) << __FUNCTION__;
client()->OnSessionKeysChange(session_id, has_additional_usable_key);
}
void MojoCdmService::OnSessionExpirationUpdate(
const std::string& session_id,
const base::Time& new_expiry_time) {
+ DVLOG(2) << __FUNCTION__;
client()->OnSessionExpirationUpdate(session_id,
new_expiry_time.ToInternalValue());
}
void MojoCdmService::OnSessionClosed(const std::string& session_id) {
+ DVLOG(2) << __FUNCTION__;
client()->OnSessionClosed(session_id);
}
@@ -130,6 +156,7 @@ void MojoCdmService::OnSessionError(const std::string& session_id,
MediaKeys::Exception exception,
uint32_t system_code,
const std::string& error_message) {
+ DVLOG(2) << __FUNCTION__;
client()->OnSessionError(session_id,
static_cast<mojo::CdmException>(exception),
system_code, error_message);

Powered by Google App Engine
This is Rietveld 408576698