cdm_adapter.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
18bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file. 48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 58bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#ifndef MEDIA_CDM_PPAPI_CDM_ADAPTER_H_ 68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#define MEDIA_CDM_PPAPI_CDM_ADAPTER_H_ 78bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include <string> 98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include <vector> 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/basictypes.h" 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/compiler_specific.h" 138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "build/build_config.h" 148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "media/cdm/ppapi/api/content_decryption_module.h" 158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "media/cdm/ppapi/cdm_helpers.h" 168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "media/cdm/ppapi/cdm_wrapper.h" 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "media/cdm/ppapi/linked_ptr.h" 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/c/pp_stdint.h" 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/c/private/pp_content_decryptor.h" 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/cpp/completion_callback.h" 218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/cpp/private/content_decryptor_private.h" 228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/cpp/var.h" 238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/cpp/var_array_buffer.h" 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/utility/completion_callback_factory.h" 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_CHROMEOS) 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/cpp/private/output_protection_private.h" 288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ppapi/cpp/private/platform_verification.h" 298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace media { 328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// GetCdmHostFunc implementation. 348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void* GetCdmHost(int host_interface_version, void* user_data); 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// An adapter class for abstracting away PPAPI interaction and threading for a 378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Content Decryption Module (CDM). 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class CdmAdapter : public pp::Instance, 398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public pp::ContentDecryptor_Private, 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public cdm::Host_4 { 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CdmAdapter(PP_Instance instance, pp::Module* module); 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual ~CdmAdapter(); 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // pp::Instance implementation. 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]) { 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return true; 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // PPP_ContentDecryptor_Private implementation. 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Note: Results of calls to these methods must be reported through the 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // PPB_ContentDecryptor_Private interface. 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Initialize(const std::string& key_system) OVERRIDE; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CreateSession(uint32_t session_id, 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& content_type, 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pp::VarArrayBuffer init_data) OVERRIDE; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void LoadSession(uint32_t session_id, 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& web_session_id) OVERRIDE; 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void UpdateSession(uint32_t session_id, 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pp::VarArrayBuffer response) OVERRIDE; 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void ReleaseSession(uint32_t session_id) OVERRIDE; 628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void Decrypt( 638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Buffer_Dev encrypted_buffer, 648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE; 658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void InitializeAudioDecoder( 668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_AudioDecoderConfig& decoder_config, 678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Buffer_Dev extra_data_buffer) OVERRIDE; 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void InitializeVideoDecoder( 698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_VideoDecoderConfig& decoder_config, 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Buffer_Dev extra_data_buffer) OVERRIDE; 718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void DeinitializeDecoder(PP_DecryptorStreamType decoder_type, 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id) OVERRIDE; 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void ResetDecoder(PP_DecryptorStreamType decoder_type, 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id) OVERRIDE; 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void DecryptAndDecode( 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Buffer_Dev encrypted_buffer, 788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_EncryptedBlockInfo& encrypted_block_info) OVERRIDE; 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // cdm::Host implementation. 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual cdm::Buffer* Allocate(uint32_t capacity) OVERRIDE; 828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetTimer(int64_t delay_ms, void* context) OVERRIDE; 838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual double GetCurrentWallTimeInSeconds() OVERRIDE; 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionCreated(uint32_t session_id, 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* web_session_id, 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t web_session_id_length) OVERRIDE; 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionMessage(uint32_t session_id, 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* message, 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t message_length, 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* destination_url, 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t destination_url_length) OVERRIDE; 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionReady(uint32_t session_id) OVERRIDE; 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionClosed(uint32_t session_id) OVERRIDE; 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionError(uint32_t session_id, 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cdm::MediaKeyError error_code, 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t system_code) OVERRIDE; 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void SendPlatformChallenge( 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* service_id, uint32_t service_id_length, 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* challenge, uint32_t challenge_length) OVERRIDE; 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void EnableOutputProtection( 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch uint32_t desired_protection_mask) OVERRIDE; 102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void QueryOutputProtectionStatus() OVERRIDE; 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnDeferredInitializationDone( 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch cdm::StreamType stream_type, 105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch cdm::Status decoder_status) OVERRIDE; 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual cdm::FileIO* CreateFileIO(cdm::FileIOClient* client) OVERRIDE; 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private: 1098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef linked_ptr<DecryptedBlockImpl> LinkedDecryptedBlock; 1108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef linked_ptr<VideoFrameImpl> LinkedVideoFrame; 1118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef linked_ptr<AudioFramesImpl> LinkedAudioFrames; 1128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool CreateCdmInstance(const std::string& key_system); 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // <code>PPB_ContentDecryptor_Private</code> dispatchers. These are passed to 1168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // <code>callback_factory_</code> to ensure that calls into 1178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // <code>PPP_ContentDecryptor_Private</code> are asynchronous. 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionCreatedInternal(int32_t result, 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t session_id, 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& web_session_id); 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionMessageInternal(int32_t result, 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t session_id, 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<uint8>& message, 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& default_url); 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionReadyInternal(int32_t result, uint32_t session_id); 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionClosedInternal(int32_t result, uint32_t session_id); 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionErrorInternal(int32_t result, 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t session_id, 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cdm::MediaKeyError error_code, 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t system_code); 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DeliverBlock(int32_t result, 1338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const cdm::Status& status, 1348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const LinkedDecryptedBlock& decrypted_block, 1358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_DecryptTrackingInfo& tracking_info); 1368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DecoderInitializeDone(int32_t result, 1378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 1388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id, 1398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool success); 1408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DecoderDeinitializeDone(int32_t result, 1418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 1428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id); 1438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DecoderResetDone(int32_t result, 1448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id); 1468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DeliverFrame(int32_t result, 1478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const cdm::Status& status, 1488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const LinkedVideoFrame& video_frame, 1498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_DecryptTrackingInfo& tracking_info); 1508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DeliverSamples(int32_t result, 1518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const cdm::Status& status, 1528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const LinkedAudioFrames& audio_frames, 1538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_DecryptTrackingInfo& tracking_info); 1548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Helper for SetTimer(). 1568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void TimerExpired(int32_t result, void* context); 1578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool IsValidVideoFrame(const LinkedVideoFrame& video_frame); 1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(NDEBUG) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Logs the given message to the JavaScript console associated with the 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // CDM adapter instance. The name of the CDM adapter issuing the log message 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // will be automatically prepended to the message. 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void LogToConsole(const pp::Var& value); 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // !defined(NDEBUG) 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_CHROMEOS) 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void SendPlatformChallengeDone(int32_t result); 1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void EnableProtectionDone(int32_t result); 1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void QueryOutputProtectionStatusDone(int32_t result); 1718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::OutputProtection_Private output_protection_; 1738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::PlatformVerification platform_verification_; 1748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Since PPAPI doesn't provide handlers for CompletionCallbacks with more than 1768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // one output we need to manage our own. These values are only read by 1778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // SendPlatformChallengeDone(). 1788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Var signed_data_output_; 1798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Var signed_data_signature_output_; 1808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Var platform_key_certificate_output_; 1818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool challenge_in_progress_; 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Same as above, these are only read by QueryOutputProtectionStatusDone(). 1848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t output_link_mask_; 1858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t output_protection_mask_; 1868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool query_output_protection_in_progress_; 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PpbBufferAllocator allocator_; 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::CompletionCallbackFactory<CdmAdapter> callback_factory_; 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) linked_ptr<CdmWrapper> cdm_; 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::string key_system_; 1938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If the CDM returned kDeferredInitialization during InitializeAudioDecoder() 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // or InitializeVideoDecoder(), the (Audio|Video)DecoderConfig.request_id is 1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // saved for the future call to OnDeferredInitializationDone(). 1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool deferred_initialize_audio_decoder_; 1981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) uint32_t deferred_audio_decoder_config_id_; 1991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool deferred_initialize_video_decoder_; 2001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) uint32_t deferred_video_decoder_config_id_; 2011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CdmAdapter); 2038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 2048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} // namespace media 2068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // MEDIA_CDM_PPAPI_CDM_ADAPTER_H_ 208