Chromium Code Reviews| 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 3fb1ee4db40e9db3764ce9255e076d94002616eb..a878f33cb983c5e7cf89ab701d9b4a8f72e12178 100644 |
| --- a/content/renderer/pepper/content_decryptor_delegate.h |
| +++ b/content/renderer/pepper/content_decryptor_delegate.h |
| @@ -5,6 +5,7 @@ |
| #ifndef CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ |
| #define CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ |
| +#include <map> |
| #include <queue> |
| #include <string> |
| @@ -16,6 +17,7 @@ |
| #include "media/base/channel_layout.h" |
| #include "media/base/decryptor.h" |
| #include "media/base/media_keys.h" |
| +#include "media/base/media_keys_session_promise.h" |
| #include "media/base/sample_format.h" |
| #include "ppapi/c/private/pp_content_decryptor.h" |
| #include "ppapi/c/private/ppp_content_decryptor_private.h" |
| @@ -43,7 +45,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 +54,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::MediaKeysSessionPromise> promise); |
| + void LoadSession(const std::string& web_session_id, |
| + scoped_ptr<media::MediaKeysSessionPromise> 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::MediaKeysSessionPromise> promise); |
| + void ReleaseSession(const std::string& web_session_id, |
| + scoped_ptr<media::MediaKeysSessionPromise> promise); |
| bool Decrypt(media::Decryptor::StreamType stream_type, |
| const scoped_refptr<media::DecoderBuffer>& encrypted_buffer, |
| const media::Decryptor::DecryptCB& decrypt_cb); |
| @@ -85,15 +90,22 @@ 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, |
| - PP_Var message, |
| - PP_Var destination_url); |
| - void OnSessionReady(uint32 session_id); |
| - void OnSessionClosed(uint32 session_id); |
| - void OnSessionError(uint32 session_id, |
| - int32_t media_error, |
| - uint32_t system_code); |
| + void OnPromiseResolved(uint32 promise_id); |
| + void OnPromiseResolvedWithSession(uint32 promise_id, |
| + PP_Var web_session_id_var); |
| + void OnPromiseRejected(uint32 promise_id, |
| + PP_Var error_name_var, |
| + uint32 system_code, |
| + PP_Var error_description_var); |
| + void OnSessionMessage(PP_Var web_session_id_var, |
| + PP_Var message_var, |
| + PP_Var destination_url_var); |
| + void OnSessionReady(PP_Var web_session_id_var); |
| + void OnSessionClosed(PP_Var web_session_id_var); |
| + void OnSessionError(PP_Var web_session_id_var, |
| + PP_Var error_name_var, |
| + uint32 system_code, |
| + PP_Var error_description_var); |
| void DeliverBlock(PP_Resource decrypted_block, |
| const PP_DecryptedBlockInfo* block_info); |
| void DecoderInitializeDone(PP_DecryptorStreamType decoder_type, |
| @@ -171,6 +183,14 @@ class ContentDecryptorDelegate { |
| void SatisfyAllPendingCallbacksOnError(); |
| + // Takes ownership of |promise| and returns an identifier to be passed via |
| + // Pepper. |
| + uint32_t SavePromise(scoped_ptr<media::MediaKeysSessionPromise> promise); |
| + |
| + // Find the promise for a specified |promise_id|. Caller is responsible to |
| + // delete the MediaKeysSessionPromise once done with it. |
| + scoped_ptr<media::MediaKeysSessionPromise> FindPromise(uint32_t promise_id); |
|
xhwang
2014/05/05 20:46:42
"find" usually doesn't touch the container. Here w
jrummell
2014/05/08 23:37:45
Done.
|
| + |
| const PP_Instance pp_instance_; |
| const PPP_ContentDecryptor_Private* const plugin_decryption_interface_; |
| @@ -178,7 +198,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 +233,11 @@ class ContentDecryptorDelegate { |
| int audio_channel_count_; |
| media::ChannelLayout audio_channel_layout_; |
| + // Keep track of outstanding promises. |promises_| has ownership of the |
| + // promise. |
| + uint32_t next_promise_id_; |
| + std::map<uint32_t, media::MediaKeysSessionPromise*> promises_; |
| + |
| base::WeakPtr<ContentDecryptorDelegate> weak_this_; |
| base::WeakPtrFactory<ContentDecryptorDelegate> weak_ptr_factory_; |