cdm_adapter.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef MEDIA_CDM_PPAPI_CDM_ADAPTER_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MEDIA_CDM_PPAPI_CDM_ADAPTER_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <string>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector>
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h"
12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/compiler_specific.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "build/build_config.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/cdm/ppapi/api/content_decryption_module.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/cdm/ppapi/cdm_helpers.h"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/cdm/ppapi/cdm_wrapper.h"
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "media/cdm/ppapi/linked_ptr.h"
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ppapi/c/private/pp_content_decryptor.h"
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ppapi/cpp/private/content_decryptor_private.h"
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ppapi/cpp/var.h"
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ppapi/cpp/var_array_buffer.h"
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ppapi/utility/completion_callback_factory.h"
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_CHROMEOS)
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ppapi/cpp/private/output_protection_private.h"
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ppapi/cpp/private/platform_verification.h"
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace media {
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// GetCdmHostFunc implementation.
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void* GetCdmHost(int host_interface_version, void* user_data);
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// An adapter class for abstracting away PPAPI interaction and threading for a
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Content Decryption Module (CDM).
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class CdmAdapter : public pp::Instance,
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                   public pp::ContentDecryptor_Private,
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                   public cdm::Host_1,
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                   public cdm::Host_2,
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                   public cdm::Host_3 {
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  CdmAdapter(PP_Instance instance, pp::Module* module);
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~CdmAdapter();
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // pp::Instance implementation.
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]) {
49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return true;
50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // PPP_ContentDecryptor_Private implementation.
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Note: Results of calls to these methods must be reported through the
54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // PPB_ContentDecryptor_Private interface.
55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void Initialize(const std::string& key_system) OVERRIDE;
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void CreateSession(uint32_t session_id,
57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                             const std::string& type,
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             pp::VarArrayBuffer init_data) OVERRIDE;
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void UpdateSession(uint32_t session_id,
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                             pp::VarArrayBuffer response) OVERRIDE;
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void ReleaseSession(uint32_t session_id) OVERRIDE;
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void Decrypt(
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      pp::Buffer_Dev encrypted_buffer,
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE;
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void InitializeAudioDecoder(
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const PP_AudioDecoderConfig& decoder_config,
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      pp::Buffer_Dev extra_data_buffer) OVERRIDE;
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void InitializeVideoDecoder(
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const PP_VideoDecoderConfig& decoder_config,
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      pp::Buffer_Dev extra_data_buffer) OVERRIDE;
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void DeinitializeDecoder(PP_DecryptorStreamType decoder_type,
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                   uint32_t request_id) OVERRIDE;
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ResetDecoder(PP_DecryptorStreamType decoder_type,
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                            uint32_t request_id) OVERRIDE;
75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void DecryptAndDecode(
76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      PP_DecryptorStreamType decoder_type,
77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      pp::Buffer_Dev encrypted_buffer,
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE;
79424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
80424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // cdm::Host implementation.
81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual cdm::Buffer* Allocate(uint32_t capacity) OVERRIDE;
82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void SetTimer(int64_t delay_ms, void* context) OVERRIDE;
83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual double GetCurrentWallTimeInSeconds() OVERRIDE;
84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void SendKeyMessage(
85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      const char* session_id, uint32_t session_id_length,
86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      const char* message, uint32_t message_length,
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const char* default_url, uint32_t default_url_length) OVERRIDE;
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SendKeyError(const char* session_id,
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                            uint32_t session_id_length,
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                            cdm::MediaKeyError error_code,
91558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                            uint32_t system_code) OVERRIDE;
92558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void GetPrivateData(int32_t* instance,
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              GetPrivateInterface* get_interface) OVERRIDE;
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // cdm::Host_2 implementation.
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SendPlatformChallenge(
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const char* service_id, uint32_t service_id_length,
98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      const char* challenge, uint32_t challenge_length) OVERRIDE;
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void EnableOutputProtection(
100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      uint32_t desired_protection_mask) OVERRIDE;
101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void QueryOutputProtectionStatus() OVERRIDE;
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnDeferredInitializationDone(
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      cdm::StreamType stream_type,
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      cdm::Status decoder_status) OVERRIDE;
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // cdm::Host_3 implementation.
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnSessionCreated(uint32_t session_id,
108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                const char* web_session_id,
109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                uint32_t web_session_id_length) OVERRIDE;
110ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void OnSessionMessage(uint32_t session_id,
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                const char* message,
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                uint32_t message_length,
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const char* destination_url,
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                uint32_t destination_url_length) OVERRIDE;
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSessionReady(uint32_t session_id) OVERRIDE;
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnSessionClosed(uint32_t session_id) OVERRIDE;
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void OnSessionError(uint32_t session_id,
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              cdm::MediaKeyError error_code,
119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                              uint32_t system_code) OVERRIDE;
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef linked_ptr<DecryptedBlockImpl> LinkedDecryptedBlock;
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef linked_ptr<VideoFrameImpl> LinkedVideoFrame;
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef linked_ptr<AudioFramesImpl> LinkedAudioFrames;
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool CreateCdmInstance(const std::string& key_system);
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // <code>PPB_ContentDecryptor_Private</code> dispatchers. These are passed to
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // <code>callback_factory_</code> to ensure that calls into
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // <code>PPP_ContentDecryptor_Private</code> are asynchronous.
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SendSessionCreatedInternal(int32_t result,
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  uint32_t session_id,
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  const std::string& web_session_id);
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SendSessionMessageInternal(int32_t result,
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  uint32_t session_id,
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  const std::vector<uint8>& message,
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  const std::string& default_url);
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SendSessionReadyInternal(int32_t result, uint32_t session_id);
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SendSessionClosedInternal(int32_t result, uint32_t session_id);
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SendSessionErrorInternal(int32_t result,
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                uint32_t session_id,
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                cdm::MediaKeyError error_code,
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                uint32_t system_code);
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DeliverBlock(int32_t result,
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const cdm::Status& status,
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const LinkedDecryptedBlock& decrypted_block,
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const PP_DecryptTrackingInfo& tracking_info);
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DecoderInitializeDone(int32_t result,
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             PP_DecryptorStreamType decoder_type,
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             uint32_t request_id,
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                             bool success);
153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void DecoderDeinitializeDone(int32_t result,
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               PP_DecryptorStreamType decoder_type,
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                               uint32_t request_id);
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void DecoderResetDone(int32_t result,
157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        PP_DecryptorStreamType decoder_type,
158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        uint32_t request_id);
159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void DeliverFrame(int32_t result,
160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                    const cdm::Status& status,
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    const LinkedVideoFrame& video_frame,
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    const PP_DecryptTrackingInfo& tracking_info);
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void DeliverSamples(int32_t result,
164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                      const cdm::Status& status,
165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                      const LinkedAudioFrames& audio_frames,
166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                      const PP_DecryptTrackingInfo& tracking_info);
167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
168424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Helper for SetTimer().
169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void TimerExpired(int32_t result, void* context);
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool IsValidVideoFrame(const LinkedVideoFrame& video_frame);
172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS)
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SendPlatformChallengeDone(int32_t result);
175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void EnableProtectionDone(int32_t result);
176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void QueryOutputProtectionStatusDone(int32_t result);
177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  pp::OutputProtection_Private output_protection_;
179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  pp::PlatformVerification platform_verification_;
180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Since PPAPI doesn't provide handlers for CompletionCallbacks with more than
182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // one output we need to manage our own.  These values are only read by
183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // SendPlatformChallengeDone().
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  pp::Var signed_data_output_;
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  pp::Var signed_data_signature_output_;
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  pp::Var platform_key_certificate_output_;
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool challenge_in_progress_;
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
189424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Same as above, these are only read by QueryOutputProtectionStatusDone().
190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  uint32_t output_link_mask_;
191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  uint32_t output_protection_mask_;
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool query_output_protection_in_progress_;
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PpbBufferAllocator allocator_;
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  pp::CompletionCallbackFactory<CdmAdapter> callback_factory_;
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  linked_ptr<CdmWrapper> cdm_;
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string key_system_;
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // If the CDM returned kDeferredInitialization during InitializeAudioDecoder()
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // or InitializeVideoDecoder(), the (Audio|Video)DecoderConfig.request_id is
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // saved for the future call to OnDeferredInitializationDone().
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool deferred_initialize_audio_decoder_;
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  uint32_t deferred_audio_decoder_config_id_;
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool deferred_initialize_video_decoder_;
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  uint32_t deferred_video_decoder_config_id_;
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(CdmAdapter);
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace media
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // MEDIA_CDM_PPAPI_CDM_ADAPTER_H_
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)