| Index: content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.cc b/content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| index 9dcb39ee9ca98931c5f49c05035f805ed883e846..8098d7592398b438a5b426d39cbdc3cba8404049 100644
|
| --- a/content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| +++ b/content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| @@ -15,6 +15,7 @@
|
| #include "content/renderer/media/cdm_session_adapter.h"
|
| #include "content/renderer/media/crypto/key_systems.h"
|
| #include "content/renderer/media/webcontentdecryptionmodulesession_impl.h"
|
| +#include "media/base/cdm_promise.h"
|
| #include "media/base/media_keys.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
| #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
|
| @@ -78,7 +79,8 @@ WebContentDecryptionModuleImpl* WebContentDecryptionModuleImpl::Create(
|
|
|
| WebContentDecryptionModuleImpl::WebContentDecryptionModuleImpl(
|
| scoped_refptr<CdmSessionAdapter> adapter)
|
| - : adapter_(adapter) {}
|
| + : adapter_(adapter), weak_ptr_factory_(this) {
|
| +}
|
|
|
| WebContentDecryptionModuleImpl::~WebContentDecryptionModuleImpl() {
|
| }
|
| @@ -97,6 +99,23 @@ WebContentDecryptionModuleImpl::createSession(
|
| return session;
|
| }
|
|
|
| +void WebContentDecryptionModuleImpl::setServerCertificate(
|
| + const uint8* server_certificate,
|
| + size_t server_certificate_length,
|
| + blink::WebContentDecryptionModuleResult result) {
|
| + DCHECK(server_certificate);
|
| + uint32 result_index = outstanding_results_.AddResult(result);
|
| + scoped_ptr<media::SimpleCdmPromise> promise(new media::SimpleCdmPromise(
|
| + base::Bind(&WebContentDecryptionModuleImpl::OnPromiseResolved,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + result_index),
|
| + base::Bind(&WebContentDecryptionModuleImpl::OnPromiseRejected,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + result_index)));
|
| + adapter_->SetServerCertificate(
|
| + server_certificate, server_certificate_length, promise.Pass());
|
| +}
|
| +
|
| media::Decryptor* WebContentDecryptionModuleImpl::GetDecryptor() {
|
| return adapter_->GetDecryptor();
|
| }
|
| @@ -107,4 +126,17 @@ int WebContentDecryptionModuleImpl::GetCdmId() const {
|
| }
|
| #endif // defined(ENABLE_BROWSER_CDMS)
|
|
|
| +void WebContentDecryptionModuleImpl::OnPromiseResolved(uint32 result_index) {
|
| + outstanding_results_.Complete(result_index);
|
| +}
|
| +
|
| +void WebContentDecryptionModuleImpl::OnPromiseRejected(
|
| + uint32 result_index,
|
| + media::MediaKeys::Exception exception_code,
|
| + uint32 system_code,
|
| + const std::string& error_message) {
|
| + outstanding_results_.CompleteWithError(
|
| + result_index, exception_code, system_code, error_message);
|
| +}
|
| +
|
| } // namespace content
|
|
|