| 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 9335f3fdbe82ffdcbb5209ab0f0ce8f1ac420786..825d2fafecc6e93152c9ebd71af3f9596b6aa419 100644
|
| --- a/media/mojo/services/mojo_cdm_service.cc
|
| +++ b/media/mojo/services/mojo_cdm_service.cc
|
| @@ -5,11 +5,11 @@
|
| #include "media/mojo/services/mojo_cdm_service.h"
|
|
|
| #include "base/bind.h"
|
| +#include "media/base/cdm_config.h"
|
| +#include "media/base/cdm_factory.h"
|
| #include "media/base/cdm_key_information.h"
|
| #include "media/base/key_systems.h"
|
| -#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"
|
| @@ -17,18 +17,22 @@
|
|
|
| namespace media {
|
|
|
| -typedef MojoCdmPromise<> SimpleMojoCdmPromise;
|
| -typedef MojoCdmPromise<std::string> NewSessionMojoCdmPromise;
|
| +using NewSessionMojoCdmPromise = MojoCdmPromise<std::string>;
|
| +using SimpleMojoCdmPromise = MojoCdmPromise<>;
|
|
|
| MojoCdmService::MojoCdmService(
|
| MojoCdmServiceContext* context,
|
| mojo::ServiceProvider* service_provider,
|
| + CdmFactory* cdm_factory,
|
| mojo::InterfaceRequest<mojo::ContentDecryptionModule> request)
|
| : binding_(this, request.Pass()),
|
| context_(context),
|
| service_provider_(service_provider),
|
| + cdm_factory_(cdm_factory),
|
| cdm_id_(CdmContext::kInvalidCdmId),
|
| weak_factory_(this) {
|
| + DCHECK(context_);
|
| + DCHECK(cdm_factory_);
|
| }
|
|
|
| MojoCdmService::~MojoCdmService() {
|
| @@ -49,26 +53,17 @@ void MojoCdmService::Initialize(
|
| DCHECK(!cdm_);
|
| DCHECK_NE(CdmContext::kInvalidCdmId, cdm_id);
|
|
|
| - SimpleMojoCdmPromise promise(callback);
|
| -
|
| - // Only AesDecryptor is supported.
|
| - // TODO(xhwang): Use a CdmFactory to create the CDM here. See
|
| - // http://crbug.com/495273
|
| - if (CanUseAesDecryptor(key_system)) {
|
| - base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr();
|
| - cdm_.reset(new AesDecryptor(
|
| - GURL::EmptyGURL(),
|
| - base::Bind(&MojoCdmService::OnSessionMessage, weak_this),
|
| - base::Bind(&MojoCdmService::OnSessionClosed, weak_this),
|
| - base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this)));
|
| - cdm_id_ = cdm_id;
|
| - context_->RegisterCdm(cdm_id_, this);
|
| - promise.resolve();
|
| - } else {
|
| - // TODO(xhwang): This should not happen when KeySystemInfo is properly
|
| - // populated. See http://crbug.com/469366
|
| - promise.reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Not supported.");
|
| - }
|
| + auto weak_this = weak_factory_.GetWeakPtr();
|
| + cdm_factory_->Create(
|
| + key_system, GURL(security_origin), CdmConfig(),
|
| + base::Bind(&MojoCdmService::OnSessionMessage, weak_this),
|
| + base::Bind(&MojoCdmService::OnSessionClosed, weak_this),
|
| + base::Bind(&MojoCdmService::OnLegacySessionError, weak_this),
|
| + base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this),
|
| + base::Bind(&MojoCdmService::OnSessionExpirationUpdate, weak_this),
|
| + base::Bind(
|
| + &MojoCdmService::OnCdmCreated, weak_this, cdm_id,
|
| + base::Passed(make_scoped_ptr(new SimpleMojoCdmPromise(callback)))));
|
| }
|
|
|
| // mojo::MediaRenderer implementation.
|
| @@ -140,6 +135,23 @@ CdmContext* MojoCdmService::GetCdmContext() {
|
| return cdm_->GetCdmContext();
|
| }
|
|
|
| +void MojoCdmService::OnCdmCreated(int cdm_id,
|
| + scoped_ptr<SimpleMojoCdmPromise> promise,
|
| + scoped_ptr<MediaKeys> cdm,
|
| + const std::string& error_message) {
|
| + // TODO(xhwang): This should not happen when KeySystemInfo is properly
|
| + // populated. See http://crbug.com/469366
|
| + if (!cdm) {
|
| + promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, error_message);
|
| + return;
|
| + }
|
| +
|
| + cdm_ = cdm.Pass();
|
| + cdm_id_ = cdm_id;
|
| + context_->RegisterCdm(cdm_id_, this);
|
| + promise->resolve();
|
| +}
|
| +
|
| void MojoCdmService::OnSessionMessage(const std::string& session_id,
|
| MediaKeys::MessageType message_type,
|
| const std::vector<uint8_t>& message,
|
|
|