| Index: content/renderer/pepper/content_decryptor_delegate.h
|
| diff --git a/content/renderer/pepper/content_decryptor_delegate.h b/content/renderer/pepper/content_decryptor_delegate.h
|
| index 2efdacb363f4ac66fe2ffc50d19ffd1323bf1835..182d6a662572cfddaf8500095f550a4a754f36de 100644
|
| --- a/content/renderer/pepper/content_decryptor_delegate.h
|
| +++ b/content/renderer/pepper/content_decryptor_delegate.h
|
| @@ -5,14 +5,17 @@
|
| #ifndef CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
|
| #define CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
|
|
|
| +#include <map>
|
| #include <queue>
|
| #include <string>
|
|
|
| #include "base/basictypes.h"
|
| #include "base/callback_helpers.h"
|
| #include "base/compiler_specific.h"
|
| +#include "base/containers/scoped_ptr_hash_map.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "media/base/cdm_promise.h"
|
| #include "media/base/channel_layout.h"
|
| #include "media/base/decryptor.h"
|
| #include "media/base/media_keys.h"
|
| @@ -43,7 +46,6 @@ class ContentDecryptorDelegate {
|
|
|
| // This object should not be accessed after |fatal_plugin_error_cb| is called.
|
| void Initialize(const std::string& key_system,
|
| - const media::SessionCreatedCB& session_created_cb,
|
| const media::SessionMessageCB& session_message_cb,
|
| const media::SessionReadyCB& session_ready_cb,
|
| const media::SessionClosedCB& session_closed_cb,
|
| @@ -53,15 +55,19 @@ class ContentDecryptorDelegate {
|
| void InstanceCrashed();
|
|
|
| // Provides access to PPP_ContentDecryptor_Private.
|
| - bool CreateSession(uint32 session_id,
|
| - const std::string& content_type,
|
| + void CreateSession(const std::string& init_data_type,
|
| const uint8* init_data,
|
| - int init_data_length);
|
| - void LoadSession(uint32 session_id, const std::string& web_session_id);
|
| - bool UpdateSession(uint32 session_id,
|
| + int init_data_length,
|
| + media::MediaKeys::SessionType session_type,
|
| + scoped_ptr<media::NewSessionCdmPromise> promise);
|
| + void LoadSession(const std::string& web_session_id,
|
| + scoped_ptr<media::NewSessionCdmPromise> promise);
|
| + void UpdateSession(const std::string& web_session_id,
|
| const uint8* response,
|
| - int response_length);
|
| - bool ReleaseSession(uint32 session_id);
|
| + int response_length,
|
| + scoped_ptr<media::SimpleCdmPromise> promise);
|
| + void ReleaseSession(const std::string& web_session_id,
|
| + scoped_ptr<media::SimpleCdmPromise> promise);
|
| bool Decrypt(media::Decryptor::StreamType stream_type,
|
| const scoped_refptr<media::DecoderBuffer>& encrypted_buffer,
|
| const media::Decryptor::DecryptCB& decrypt_cb);
|
| @@ -85,15 +91,21 @@ class ContentDecryptorDelegate {
|
| const media::Decryptor::VideoDecodeCB& video_decode_cb);
|
|
|
| // PPB_ContentDecryptor_Private dispatching methods.
|
| - void OnSessionCreated(uint32 session_id, PP_Var web_session_id_var);
|
| - void OnSessionMessage(uint32 session_id,
|
| + void OnPromiseResolved(uint32 promise_id);
|
| + void OnPromiseResolvedWithSession(uint32 promise_id, PP_Var web_session_id);
|
| + void OnPromiseRejected(uint32 promise_id,
|
| + PP_CdmExceptionCode exception_code,
|
| + uint32 system_code,
|
| + PP_Var error_description);
|
| + void OnSessionMessage(PP_Var web_session_id,
|
| PP_Var message,
|
| - PP_Var destination_url_var);
|
| - void OnSessionReady(uint32 session_id);
|
| - void OnSessionClosed(uint32 session_id);
|
| - void OnSessionError(uint32 session_id,
|
| - int32_t media_error,
|
| - uint32_t system_code);
|
| + PP_Var destination_url);
|
| + void OnSessionReady(PP_Var web_session_id);
|
| + void OnSessionClosed(PP_Var web_session_id);
|
| + void OnSessionError(PP_Var web_session_id,
|
| + PP_CdmExceptionCode exception_code,
|
| + uint32 system_code,
|
| + PP_Var error_description);
|
| void DeliverBlock(PP_Resource decrypted_block,
|
| const PP_DecryptedBlockInfo* block_info);
|
| void DecoderInitializeDone(PP_DecryptorStreamType decoder_type,
|
| @@ -109,6 +121,10 @@ class ContentDecryptorDelegate {
|
| const PP_DecryptedSampleInfo* sample_info);
|
|
|
| private:
|
| + // The following types keep track of Promises. The index is the promise_id,
|
| + // so that returning results can be matched to the corresponding promise.
|
| + typedef base::ScopedPtrHashMap<uint32_t, media::CdmPromise> PromiseMap;
|
| +
|
| template <typename Callback>
|
| class TrackableCallback {
|
| public:
|
| @@ -171,6 +187,14 @@ class ContentDecryptorDelegate {
|
|
|
| void SatisfyAllPendingCallbacksOnError();
|
|
|
| + // Takes ownership of |promise| and returns an identifier to be passed via
|
| + // Pepper.
|
| + uint32_t SavePromise(scoped_ptr<media::CdmPromise> promise);
|
| +
|
| + // Find the promise for a specified |promise_id|. Caller is responsible to
|
| + // delete the CdmPromise<> once done with it.
|
| + scoped_ptr<media::CdmPromise> TakePromise(uint32_t promise_id);
|
| +
|
| const PP_Instance pp_instance_;
|
| const PPP_ContentDecryptor_Private* const plugin_decryption_interface_;
|
|
|
| @@ -178,7 +202,6 @@ class ContentDecryptorDelegate {
|
| std::string key_system_;
|
|
|
| // Callbacks for firing session events.
|
| - media::SessionCreatedCB session_created_cb_;
|
| media::SessionMessageCB session_message_cb_;
|
| media::SessionReadyCB session_ready_cb_;
|
| media::SessionClosedCB session_closed_cb_;
|
| @@ -214,6 +237,10 @@ class ContentDecryptorDelegate {
|
| int audio_channel_count_;
|
| media::ChannelLayout audio_channel_layout_;
|
|
|
| + // Keep track of outstanding promises. Maps have ownership of the promises.
|
| + uint32_t next_promise_id_;
|
| + PromiseMap promises_;
|
| +
|
| base::WeakPtr<ContentDecryptorDelegate> weak_this_;
|
| base::WeakPtrFactory<ContentDecryptorDelegate> weak_ptr_factory_;
|
|
|
|
|