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

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: rebase only; compiles but needs more polish... Created 5 years, 7 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
« no previous file with comments | « media/mojo/services/mojo_cdm_service.h ('k') | media/mojo/services/mojo_cdm_service_context.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « media/mojo/services/mojo_cdm_service.h ('k') | media/mojo/services/mojo_cdm_service_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698