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

Unified Diff: webkit/media/crypto/ppapi/cdm_wrapper.cc

Issue 10854209: Modify the PPAPI CDM interface to pass more info. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « ppapi/thunk/ppb_instance_api.h ('k') | webkit/plugins/ppapi/ppapi_plugin_instance.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/media/crypto/ppapi/cdm_wrapper.cc
diff --git a/webkit/media/crypto/ppapi/cdm_wrapper.cc b/webkit/media/crypto/ppapi/cdm_wrapper.cc
index 8b7edf3f85cac81b8a04cf42e9211565e471ed5e..8faee29e035df911fece570efbaaa0eeb50b7715 100644
--- a/webkit/media/crypto/ppapi/cdm_wrapper.cc
+++ b/webkit/media/crypto/ppapi/cdm_wrapper.cc
@@ -7,6 +7,7 @@
#include "base/compiler_specific.h" // For OVERRIDE.
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/pp_stdint.h"
+#include "ppapi/c/private/pp_content_decryptor.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/cpp/core.h"
#include "ppapi/cpp/instance.h"
@@ -33,13 +34,26 @@ struct DecryptorMessage {
};
struct DecryptedBlock {
- DecryptedBlock() : request_id(0) {}
- int32_t request_id;
- std::string data;
+ DecryptedBlock() {
+ std::memset(reinterpret_cast<void*>(&decrypted_block_info),
+ 0,
+ sizeof(decrypted_block_info));
+ }
+ std::string decrypted_data;
+ PP_DecryptedBlockInfo decrypted_block_info;
};
+bool IsMainThread() {
+ return pp::Module::Get()->core()->IsMainThread();
+}
+
void CallOnMain(pp::CompletionCallback cb) {
- pp::Module::Get()->core()->CallOnMainThread(0, cb, PP_OK);
+ // TODO(tomfinegan): This is only necessary because PPAPI doesn't allow calls
+ // off the main thread yet. Remove this once the change lands.
+ if (IsMainThread())
+ cb.Run(PP_OK);
+ else
+ pp::Module::Get()->core()->CallOnMainThread(0, cb, PP_OK);
}
} // namespace
@@ -57,13 +71,16 @@ class CDMWrapper : public pp::Instance,
virtual bool GenerateKeyRequest(const std::string& key_system,
pp::VarArrayBuffer init_data) OVERRIDE;
virtual bool AddKey(const std::string& session_id,
- pp::VarArrayBuffer key) OVERRIDE;
+ pp::VarArrayBuffer key,
+ pp::VarArrayBuffer init_data) OVERRIDE;
virtual bool CancelKeyRequest(const std::string& session_id) OVERRIDE;
- virtual bool Decrypt(pp::Buffer_Dev encrypted_buffer,
- int32_t request_id) OVERRIDE;
+ virtual bool Decrypt(
+ pp::Buffer_Dev encrypted_buffer,
+ const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE;
- virtual bool DecryptAndDecode(pp::Buffer_Dev encrypted_buffer,
- int32_t request_id) OVERRIDE {
+ virtual bool DecryptAndDecode(
+ pp::Buffer_Dev encrypted_buffer,
+ const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE {
return false;
}
@@ -109,9 +126,12 @@ bool CDMWrapper::GenerateKeyRequest(const std::string& key_system,
}
bool CDMWrapper::AddKey(const std::string& session_id,
- pp::VarArrayBuffer key) {
+ pp::VarArrayBuffer key,
+ pp::VarArrayBuffer init_data) {
const std::string key_string(reinterpret_cast<char*>(key.Map()),
key.ByteLength());
+ const std::string init_data_string(reinterpret_cast<char*>(init_data.Map()),
+ init_data.ByteLength());
PP_DCHECK(!session_id.empty() && !key_string.empty());
@@ -135,18 +155,27 @@ bool CDMWrapper::CancelKeyRequest(const std::string& session_id) {
decryptor_message.session_id = "0";
decryptor_message.default_url = "http://www.google.com";
decryptor_message.message_data = "CancelKeyRequest";
+
CallOnMain(callback_factory_.NewCallback(&CDMWrapper::KeyMessage,
decryptor_message));
return true;
}
bool CDMWrapper::Decrypt(pp::Buffer_Dev encrypted_buffer,
- int32_t request_id) {
+ const PP_EncryptedBlockInfo& encrypted_block_info) {
PP_DCHECK(!encrypted_buffer.is_null());
DecryptedBlock decrypted_block;
- decrypted_block.request_id = request_id;
- decrypted_block.data = "Pretend I'm decrypted data!";
+ decrypted_block.decrypted_data = "Pretend I'm decrypted data!";
+ decrypted_block.decrypted_block_info.result = PP_DECRYPTRESULT_SUCCESS;
+ decrypted_block.decrypted_block_info.tracking_info =
+ encrypted_block_info.tracking_info;
+
+ // TODO(tomfinegan): This would end up copying a lot of data in the real
+ // implementation if we continue passing std::strings around. It *might* not
+ // be such a big deal w/a real CDM. We may be able to simply pass a pointer
+ // into the CDM. Otherwise we could look into using std::tr1::shared_ptr
+ // instead of passing a giant std::string filled with encrypted data.
CallOnMain(callback_factory_.NewCallback(&CDMWrapper::DeliverBlock,
decrypted_block));
return true;
@@ -201,9 +230,10 @@ void CDMWrapper::KeyError(int32_t result,
void CDMWrapper::DeliverBlock(int32_t result,
const DecryptedBlock& decrypted_block) {
pp::Buffer_Dev decrypted_buffer(
- StringToBufferResource(decrypted_block.data));
- pp::ContentDecryptor_Private::DeliverBlock(decrypted_buffer,
- decrypted_block.request_id);
+ StringToBufferResource(decrypted_block.decrypted_data));
+ pp::ContentDecryptor_Private::DeliverBlock(
+ decrypted_buffer,
+ decrypted_block.decrypted_block_info);
}
// This object is the global object representing this plugin library as long
« no previous file with comments | « ppapi/thunk/ppb_instance_api.h ('k') | webkit/plugins/ppapi/ppapi_plugin_instance.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698