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

Unified Diff: webkit/media/crypto/ppapi_decryptor.cc

Issue 10836038: Call CDMWrapper from PpapiDecryptor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add PP_DecryptionBuffer_Dev and update Decrypt() PPP call. Created 8 years, 4 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: webkit/media/crypto/ppapi_decryptor.cc
diff --git a/webkit/media/crypto/ppapi_decryptor.cc b/webkit/media/crypto/ppapi_decryptor.cc
index f547f687dcb2212769571d599141f6e9da991522..894a223696e32e8053cfc4f6805cc407ac2a9d78 100644
--- a/webkit/media/crypto/ppapi_decryptor.cc
+++ b/webkit/media/crypto/ppapi_decryptor.cc
@@ -4,7 +4,14 @@
#include "webkit/media/crypto/ppapi_decryptor.h"
+#include <string>
+
+#include "base/bind.h"
+#include "base/location.h"
#include "base/logging.h"
+#include "base/message_loop.h"
+#include "base/message_loop_proxy.h"
+#include "content/public/renderer/render_thread.h"
#include "media/base/decoder_buffer.h"
#include "media/base/decryptor_client.h"
#include "webkit/media/crypto/key_systems.h"
@@ -16,7 +23,11 @@ PpapiDecryptor::PpapiDecryptor(
media::DecryptorClient* client,
const scoped_refptr<webkit::ppapi::PluginInstance>& plugin_instance)
: client_(client),
- cdm_plugin_(plugin_instance) {
+ cdm_plugin_(plugin_instance),
+ render_loop_proxy_(content::RenderThread::Get()->GetMessageLoop()
+ ->message_loop_proxy()) {
dmichael (off chromium) 2012/08/09 16:24:52 nit: indentation is off. Would it fit if you brea
+ DCHECK(cdm_plugin_);
+ cdm_plugin_->SetDecryptClient(client);
}
PpapiDecryptor::~PpapiDecryptor() {
@@ -25,12 +36,16 @@ PpapiDecryptor::~PpapiDecryptor() {
void PpapiDecryptor::GenerateKeyRequest(const std::string& key_system,
const uint8* init_data,
int init_data_length) {
+ DVLOG(1) << "GenerateKeyRequest()";
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
DCHECK(cdm_plugin_);
+
// TODO(xhwang): Enable the following once we have updated PluginInstance.
- // if (!cdm_plugin_->GenerateKeyRequest(key_system,
- // init_data, init_data_length)) {
- // client_->KeyError(key_system, "", media::Decryptor::kUnknownError, 0);
- // }
+ std::string init_data_string(reinterpret_cast<const char*>(init_data),
+ init_data_length);
+ if (!cdm_plugin_->GenerateKeyRequest(key_system, init_data_string)) {
+ client_->KeyError(key_system, "", media::Decryptor::kUnknownError, 0);
+ }
}
void PpapiDecryptor::AddKey(const std::string& key_system,
@@ -39,6 +54,8 @@ void PpapiDecryptor::AddKey(const std::string& key_system,
const uint8* init_data,
int init_data_length,
const std::string& session_id) {
+ DVLOG(1) << "AddKey()";
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
DCHECK(cdm_plugin_);
// TODO(xhwang): Enable the following once we have updated PluginInstance.
// if (!cdm_plugin_->AddKey(key_system, key, key_length,
@@ -49,6 +66,8 @@ void PpapiDecryptor::AddKey(const std::string& key_system,
void PpapiDecryptor::CancelKeyRequest(const std::string& key_system,
const std::string& session_id) {
+ DVLOG(1) << "CancelKeyRequest()";
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
DCHECK(cdm_plugin_);
// TODO(xhwang): Enable the following once we have updated PluginInstance.
// if (!cdm_plugin_->CancelKeyRequest(key_system, session_id))
@@ -58,23 +77,49 @@ void PpapiDecryptor::CancelKeyRequest(const std::string& key_system,
void PpapiDecryptor::Decrypt(
const scoped_refptr<media::DecoderBuffer>& encrypted,
const DecryptCB& decrypt_cb) {
+ DVLOG(1) << "Decrypt()";
DCHECK(cdm_plugin_);
- // TODO(xhwang): Enable the following once we have updated PluginInstance.
- // TODO(xhwang): Need to figure out thread safety about PPP calls.
- // if (!cdm_plugin_->Decrypt(
- // encrypted, base::Bind(&PpapiDecryptor::DataReady, this, decrypt_cb))) {
- // decrypt_cb.Run(kError, NULL);
- // }
+
+ if (!render_loop_proxy_->BelongsToCurrentThread()) {
+ render_loop_proxy_->PostTask(FROM_HERE, base::Bind(&PpapiDecryptor::Decrypt,
+ base::Unretained(this),
+ encrypted, decrypt_cb));
+ return;
+ }
+
+ cdm_plugin_->Decrypt(encrypted, base::Bind(&PpapiDecryptor::DataReady,
+ base::Unretained(this),
+ decrypt_cb));
+
+ // TODO(xhwang): This is a hack only for testing purpose.
+ for (int i = 0; i < 4; ++i ) {
+ cdm_plugin_->Decrypt(encrypted, base::Bind(&PpapiDecryptor::DataReady,
+ base::Unretained(this),
+ DecryptCB()));
+ }
}
void PpapiDecryptor::Stop() {
}
void PpapiDecryptor::DataReady(const DecryptCB& decrypt_cb,
- const uint8* data, int data_size ) {
- DCHECK(!decrypt_cb.is_null());
+ void* data, int data_size ) {
+ DVLOG(1) << "DataReady()";
+ DCHECK(render_loop_proxy_->BelongsToCurrentThread());
+
+ // TODO(xhwang): This is a hack only for testing purpose.
+ if (decrypt_cb.is_null())
+ return;
+
+ if (!data || !data_size) {
+ decrypt_cb.Run(kError, NULL);
+ return;
+ }
+
scoped_refptr<media::DecoderBuffer> decrypted_data =
- media::DecoderBuffer::CopyFrom(data, data_size);
+ media::DecoderBuffer::CopyFrom(reinterpret_cast<const uint8*>(data),
+ data_size);
+ DCHECK(!decrypt_cb.is_null());
decrypt_cb.Run(kSuccess, decrypted_data);
}

Powered by Google App Engine
This is Rietveld 408576698