• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef PPAPI_CPP_PRIVATE_CONTENT_DECRYPTOR_PRIVATE_H_
6 #define PPAPI_CPP_PRIVATE_CONTENT_DECRYPTOR_PRIVATE_H_
7 
8 #include <string>
9 
10 #include "ppapi/c/private/pp_content_decryptor.h"
11 #include "ppapi/c/private/ppb_content_decryptor_private.h"
12 #include "ppapi/c/private/ppp_content_decryptor_private.h"
13 
14 #include "ppapi/cpp/dev/buffer_dev.h"
15 #include "ppapi/cpp/instance_handle.h"
16 #include "ppapi/cpp/var.h"
17 #include "ppapi/cpp/var_array_buffer.h"
18 
19 namespace pp {
20 
21 class Instance;
22 
23 // TODO(tomfinegan): Remove redundant pp:: usage, and pass VarArrayBuffers as
24 // const references.
25 
26 class ContentDecryptor_Private {
27  public:
28   explicit ContentDecryptor_Private(Instance* instance);
29   virtual ~ContentDecryptor_Private();
30 
31   // PPP_ContentDecryptor_Private functions exposed as virtual functions
32   // for you to override.
33   // TODO(tomfinegan): This could be optimized to pass pp::Var instead of
34   // strings. The change would allow the CDM wrapper to reuse vars when
35   // replying to the browser.
36   virtual void Initialize(const std::string& key_system) = 0;
37   virtual void CreateSession(uint32_t promise_id,
38                              const std::string& init_data_type,
39                              pp::VarArrayBuffer init_data,
40                              PP_SessionType session_type) = 0;
41   virtual void LoadSession(uint32_t promise_id,
42                            const std::string& web_session_id) = 0;
43   virtual void UpdateSession(uint32_t promise_id,
44                              const std::string& web_session_id,
45                              pp::VarArrayBuffer response) = 0;
46   virtual void ReleaseSession(uint32_t promise_id,
47                               const std::string& web_session_id) = 0;
48   virtual void Decrypt(pp::Buffer_Dev encrypted_buffer,
49                        const PP_EncryptedBlockInfo& encrypted_block_info) = 0;
50   virtual void InitializeAudioDecoder(
51       const PP_AudioDecoderConfig& decoder_config,
52       pp::Buffer_Dev extra_data_resource) = 0;
53   virtual void InitializeVideoDecoder(
54       const PP_VideoDecoderConfig& decoder_config,
55       pp::Buffer_Dev extra_data_resource) = 0;
56   virtual void DeinitializeDecoder(PP_DecryptorStreamType decoder_type,
57                                    uint32_t request_id) = 0;
58   virtual void ResetDecoder(PP_DecryptorStreamType decoder_type,
59                             uint32_t request_id) = 0;
60   // Null |encrypted_frame| means end-of-stream buffer.
61   virtual void DecryptAndDecode(
62       PP_DecryptorStreamType decoder_type,
63       pp::Buffer_Dev encrypted_buffer,
64       const PP_EncryptedBlockInfo& encrypted_block_info) = 0;
65 
66   // PPB_ContentDecryptor_Private methods for passing data from the decryptor
67   // to the browser.
68   void PromiseResolved(uint32_t promise_id);
69   void PromiseResolvedWithSession(uint32_t promise_id,
70                                   const std::string& web_session_id);
71   void PromiseRejected(uint32_t promise_id,
72                        PP_CdmExceptionCode exception_code,
73                        uint32_t system_code,
74                        const std::string& error_description);
75   void SessionMessage(const std::string& web_session_id,
76                       pp::VarArrayBuffer message,
77                       const std::string& destination_url);
78   void SessionReady(const std::string& web_session_id);
79   void SessionClosed(const std::string& web_session_id);
80   void SessionError(const std::string& web_session_id,
81                     PP_CdmExceptionCode exception_code,
82                     uint32_t system_code,
83                     const std::string& error_description);
84 
85   // The plugin must not hold a reference to the encrypted buffer resource
86   // provided to Decrypt() when it calls this method. The browser will reuse
87   // the buffer in a subsequent Decrypt() call.
88   void DeliverBlock(pp::Buffer_Dev decrypted_block,
89                     const PP_DecryptedBlockInfo& decrypted_block_info);
90 
91   void DecoderInitializeDone(PP_DecryptorStreamType decoder_type,
92                              uint32_t request_id,
93                              bool status);
94   void DecoderDeinitializeDone(PP_DecryptorStreamType decoder_type,
95                                uint32_t request_id);
96   void DecoderResetDone(PP_DecryptorStreamType decoder_type,
97                         uint32_t request_id);
98 
99   // The plugin must not hold a reference to the encrypted buffer resource
100   // provided to DecryptAndDecode() when it calls this method. The browser will
101   // reuse the buffer in a subsequent DecryptAndDecode() call.
102   void DeliverFrame(pp::Buffer_Dev decrypted_frame,
103                     const PP_DecryptedFrameInfo& decrypted_frame_info);
104 
105   // The plugin must not hold a reference to the encrypted buffer resource
106   // provided to DecryptAndDecode() when it calls this method. The browser will
107   // reuse the buffer in a subsequent DecryptAndDecode() call.
108   void DeliverSamples(pp::Buffer_Dev audio_frames,
109                       const PP_DecryptedSampleInfo& decrypted_sample_info);
110 
111  private:
112   InstanceHandle associated_instance_;
113 };
114 
115 }  // namespace pp
116 
117 #endif  // PPAPI_CPP_PRIVATE_CONTENT_DECRYPTOR_PRIVATE_H_
118