| Index: ppapi/examples/content_decryptor/content_decryptor.cc
|
| diff --git a/ppapi/examples/content_decryptor/content_decryptor.cc b/ppapi/examples/content_decryptor/content_decryptor.cc
|
| index f57d5b920f65ed2ac48e5bf28d922e7f63711ed3..d0f6d7a8342fa456f84a236569f0305bf4c7b10d 100644
|
| --- a/ppapi/examples/content_decryptor/content_decryptor.cc
|
| +++ b/ppapi/examples/content_decryptor/content_decryptor.cc
|
| @@ -5,10 +5,13 @@
|
| #include <cassert>
|
| #include <string>
|
|
|
| +#include <iostream>
|
| +
|
| #include "base/basictypes.h"
|
| #include "base/rand_util.h"
|
| #include "base/values.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "ppapi/c/dev/pp_decryption_buffer_dev.h"
|
| #include "ppapi/c/pp_errors.h"
|
| #include "ppapi/cpp/completion_callback.h"
|
| #include "ppapi/cpp/core.h"
|
| @@ -20,6 +23,7 @@
|
| #include "ppapi/cpp/dev/content_decryptor_dev.h"
|
| #include "ppapi/shared_impl/var.h"
|
| #include "ppapi/utility/completion_callback_factory.h"
|
| +#include "ppapi/utility/threading/simple_thread.h"
|
|
|
| using ppapi::StringVar;
|
|
|
| @@ -39,6 +43,7 @@ struct DecryptedData {
|
| DecryptedData() : callback(PP_MakeCompletionCallback(NULL, NULL)) {}
|
| PP_CompletionCallback callback;
|
| std::string data;
|
| + uint32_t id;
|
| };
|
|
|
| bool IsMainThread() {
|
| @@ -59,25 +64,33 @@ class CDMWrapper : public pp::Instance,
|
| public:
|
| const static size_t kSessionIdLength = 8;
|
| CDMWrapper(PP_Instance instance, pp::Module* module);
|
| - virtual ~CDMWrapper() {}
|
| + virtual ~CDMWrapper();
|
|
|
| // PPP_ContentDecryptor_Dev methods
|
| virtual bool GenerateKeyRequest(PP_Var key_system, PP_Resource init_data);
|
| virtual bool AddKey(PP_Var session_id, PP_Resource key);
|
| virtual bool CancelKeyRequest(PP_Var session_id);
|
| - virtual bool Decrypt(PP_Resource encrypted_block,
|
| - PP_CompletionCallback callback);
|
| -
|
| + virtual bool Decrypt(const PP_DecryptionBuffer_Dev& encrypted_buffer);
|
| virtual bool DecryptAndDecode(PP_Resource encrypted_block,
|
| PP_CompletionCallback callback) {
|
| return false;
|
| }
|
|
|
| virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]) {
|
| + std::cout << "Init!!!!!!!!!!!!!!!!!" << std::endl;
|
| + bool success = thread_->Start();
|
| + std::cout << "SimpleThread Start() returns: " << success << std::endl;
|
| + int32_t result = thread_->message_loop().PostWork(
|
| + callback_factory_.NewCallback(&CDMWrapper::CallOnBackground));
|
| + std::cout << "PostWork returns: " << result << std::endl;
|
| return true;
|
| }
|
|
|
| private:
|
| + void CallOnBackground(int32_t result) {
|
| + std::cout << "CallOnBackground called on Background !!!!!!!!!" << std::endl;
|
| + }
|
| +
|
| PP_Resource StringToBufferResource(const std::string& str);
|
|
|
| // <code>PPB_ContentDecryptor_Dev</code> dispatchers. These are passed to
|
| @@ -111,15 +124,22 @@ class CDMWrapper : public pp::Instance,
|
| // session_id:key? Or am I completely confused? :)
|
| std::string key_;
|
| std::string key_system_;
|
| +
|
| + pp::SimpleThread* thread_;
|
| };
|
|
|
| CDMWrapper::CDMWrapper(PP_Instance instance,
|
| pp::Module* module)
|
| : pp::Instance(instance),
|
| pp::ContentDecryptor_Dev(this) {
|
| + thread_ = new pp::SimpleThread(this);
|
| callback_factory_.Initialize(this);
|
| }
|
|
|
| +CDMWrapper::~CDMWrapper() {
|
| + delete thread_;
|
| +}
|
| +
|
| bool CDMWrapper::GenerateKeyRequest(PP_Var key_system_arg,
|
| PP_Resource init_data) {
|
| if (init_data) {
|
| @@ -134,14 +154,14 @@ bool CDMWrapper::GenerateKeyRequest(PP_Var key_system_arg,
|
| init_buffer.size());
|
| }
|
|
|
| - StringVar* key_system_var = StringVar::FromPPVar(key_system_arg);
|
| + //StringVar* key_system_var = StringVar::FromPPVar(key_system_arg);
|
|
|
| // TODO(tomfinegan): confirm support for the key system.
|
|
|
| DecryptorMessage decryptor_message;
|
| - key_system_ = key_system_var->value();
|
| + key_system_ = "org.chromium.externalclearkey";
|
| decryptor_message.key_system = key_system_;
|
| - session_id_ = base::RandBytesAsString(kSessionIdLength);
|
| + session_id_ = "1";
|
| decryptor_message.session_id = session_id_;
|
| decryptor_message.default_url = "http://www.google.com";
|
| decryptor_message.message_data = "key request";
|
| @@ -177,16 +197,14 @@ bool CDMWrapper::CancelKeyRequest(PP_Var session_id_var) {
|
| return true;
|
| }
|
|
|
| -bool CDMWrapper::Decrypt(PP_Resource encrypted_block,
|
| - PP_CompletionCallback callback) {
|
| - pp::Buffer_Dev block_buffer(encrypted_block);
|
| - if (!block_buffer.data() || !callback.func) {
|
| +bool CDMWrapper::Decrypt(const PP_DecryptionBuffer_Dev& encrypted_buffer) {
|
| + pp::Buffer_Dev block_buffer(encrypted_buffer.data);
|
| + if (!block_buffer.data())
|
| return false;
|
| - }
|
|
|
| DecryptedData decrypted_data;
|
| - decrypted_data.callback = callback;
|
| decrypted_data.data = "Pretend I'm decrypted data!";
|
| + decrypted_data.id = encrypted_buffer.id;
|
| CallOnMain(callback_factory_.NewCallback(&CDMWrapper::DeliverBlock,
|
| decrypted_data));
|
| return true;
|
| @@ -215,31 +233,30 @@ void CDMWrapper::NeedKey(int32 result,
|
|
|
| void CDMWrapper::KeyAdded(int32 result,
|
| const DecryptorMessage& decryptor_message) {
|
| - PP_Var key_system = StringVar::StringToPPVar(decryptor_message.key_system);
|
| - PP_Var session_id = StringVar::StringToPPVar(decryptor_message.session_id);
|
| - pp::ContentDecryptor_Dev::KeyAdded(key_system, session_id);
|
| + pp::Var key_system(decryptor_message.key_system);
|
| + pp::Var session_id(decryptor_message.session_id);
|
| + pp::ContentDecryptor_Dev::KeyAdded(key_system.pp_var(), session_id.pp_var());
|
| }
|
|
|
| void CDMWrapper::KeyMessage(int32 result,
|
| const DecryptorMessage& decryptor_message) {
|
| - PP_Var key_system = StringVar::StringToPPVar(decryptor_message.key_system);
|
| - PP_Var session_id = StringVar::StringToPPVar(decryptor_message.session_id);
|
| + pp::Var key_system(decryptor_message.key_system);
|
| + pp::Var session_id(decryptor_message.session_id);
|
| PP_Resource message =
|
| StringToBufferResource(decryptor_message.message_data);
|
| - PP_Var default_url =
|
| - StringVar::StringToPPVar(decryptor_message.default_url);
|
| - pp::ContentDecryptor_Dev::KeyMessage(key_system,
|
| - session_id,
|
| + pp::Var default_url(decryptor_message.default_url);
|
| + pp::ContentDecryptor_Dev::KeyMessage(key_system.pp_var(),
|
| + session_id.pp_var(),
|
| message,
|
| - default_url);
|
| + default_url.pp_var());
|
| }
|
|
|
| void CDMWrapper::KeyError(int32 result,
|
| const DecryptorMessage& decryptor_message) {
|
| - PP_Var key_system = StringVar::StringToPPVar(decryptor_message.key_system);
|
| - PP_Var session_id = StringVar::StringToPPVar(decryptor_message.session_id);
|
| - pp::ContentDecryptor_Dev::KeyError(key_system,
|
| - session_id,
|
| + pp::Var key_system(decryptor_message.key_system);
|
| + pp::Var session_id(decryptor_message.session_id);
|
| + pp::ContentDecryptor_Dev::KeyError(key_system.pp_var(),
|
| + session_id.pp_var(),
|
| decryptor_message.media_error,
|
| decryptor_message.system_error);
|
| }
|
| @@ -250,7 +267,7 @@ void CDMWrapper::DeliverBlock(int32 result,
|
| decrypted_data.data);
|
| if (decrypted_resource) {
|
| pp::ContentDecryptor_Dev::DeliverBlock(decrypted_resource,
|
| - decrypted_data.callback);
|
| + decrypted_data.id);
|
| }
|
| }
|
|
|
|
|