cdm_adapter.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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, 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public cdm::Host_1, 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public cdm::Host_2, 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public cdm::Host_3 { 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) CdmAdapter(PP_Instance instance, pp::Module* module); 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual ~CdmAdapter(); 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // pp::Instance implementation. 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]) { 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return true; 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // PPP_ContentDecryptor_Private implementation. 538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Note: Results of calls to these methods must be reported through the 548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // PPB_ContentDecryptor_Private interface. 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Initialize(const std::string& key_system) OVERRIDE; 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CreateSession(uint32_t session_id, 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& type, 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pp::VarArrayBuffer init_data) 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; 848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SendKeyMessage( 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char* session_id, uint32_t session_id_length, 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char* message, uint32_t message_length, 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char* default_url, uint32_t default_url_length) OVERRIDE; 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SendKeyError(const char* session_id, 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) uint32_t session_id_length, 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) cdm::MediaKeyError error_code, 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t system_code) OVERRIDE; 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void GetPrivateData(int32_t* instance, 938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) GetPrivateInterface* get_interface) OVERRIDE; 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // cdm::Host_2 implementation. 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SendPlatformChallenge( 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char* service_id, uint32_t service_id_length, 981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const char* challenge, uint32_t challenge_length) OVERRIDE; 998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void EnableOutputProtection( 1008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t desired_protection_mask) OVERRIDE; 1018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void QueryOutputProtectionStatus() OVERRIDE; 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void OnDeferredInitializationDone( 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) cdm::StreamType stream_type, 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) cdm::Status decoder_status) OVERRIDE; 1058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // cdm::Host_3 implementation. 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionCreated(uint32_t session_id, 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* web_session_id, 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t web_session_id_length) OVERRIDE; 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionMessage(uint32_t session_id, 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* message, 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t message_length, 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* destination_url, 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t destination_url_length) OVERRIDE; 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionReady(uint32_t session_id) OVERRIDE; 116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionClosed(uint32_t session_id) OVERRIDE; 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnSessionError(uint32_t session_id, 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cdm::MediaKeyError error_code, 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t system_code) OVERRIDE; 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) private: 1228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef linked_ptr<DecryptedBlockImpl> LinkedDecryptedBlock; 1238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef linked_ptr<VideoFrameImpl> LinkedVideoFrame; 1248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef linked_ptr<AudioFramesImpl> LinkedAudioFrames; 1258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool CreateCdmInstance(const std::string& key_system); 1278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // <code>PPB_ContentDecryptor_Private</code> dispatchers. These are passed to 1298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // <code>callback_factory_</code> to ensure that calls into 1308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // <code>PPP_ContentDecryptor_Private</code> are asynchronous. 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionCreatedInternal(int32_t result, 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t session_id, 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& web_session_id); 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionMessageInternal(int32_t result, 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t session_id, 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<uint8>& message, 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& default_url); 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionReadyInternal(int32_t result, uint32_t session_id); 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionClosedInternal(int32_t result, uint32_t session_id); 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SendSessionErrorInternal(int32_t result, 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t session_id, 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) cdm::MediaKeyError error_code, 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32_t system_code); 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DeliverBlock(int32_t result, 1468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const cdm::Status& status, 1478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const LinkedDecryptedBlock& decrypted_block, 1488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_DecryptTrackingInfo& tracking_info); 1498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DecoderInitializeDone(int32_t result, 1508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 1518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id, 1528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool success); 1538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DecoderDeinitializeDone(int32_t result, 1548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 1558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id); 1568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DecoderResetDone(int32_t result, 1578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PP_DecryptorStreamType decoder_type, 1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t request_id); 1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DeliverFrame(int32_t result, 1608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const cdm::Status& status, 1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const LinkedVideoFrame& video_frame, 1628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_DecryptTrackingInfo& tracking_info); 1638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void DeliverSamples(int32_t result, 1648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const cdm::Status& status, 1658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const LinkedAudioFrames& audio_frames, 1668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const PP_DecryptTrackingInfo& tracking_info); 1678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Helper for SetTimer(). 1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void TimerExpired(int32_t result, void* context); 1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool IsValidVideoFrame(const LinkedVideoFrame& video_frame); 1728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_CHROMEOS) 1748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void SendPlatformChallengeDone(int32_t result); 1758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void EnableProtectionDone(int32_t result); 1768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void QueryOutputProtectionStatusDone(int32_t result); 1778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::OutputProtection_Private output_protection_; 1798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::PlatformVerification platform_verification_; 1808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Since PPAPI doesn't provide handlers for CompletionCallbacks with more than 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // one output we need to manage our own. These values are only read by 1838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // SendPlatformChallengeDone(). 1848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Var signed_data_output_; 1858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Var signed_data_signature_output_; 1868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::Var platform_key_certificate_output_; 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool challenge_in_progress_; 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Same as above, these are only read by QueryOutputProtectionStatusDone(). 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t output_link_mask_; 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) uint32_t output_protection_mask_; 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool query_output_protection_in_progress_; 1938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PpbBufferAllocator allocator_; 1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pp::CompletionCallbackFactory<CdmAdapter> callback_factory_; 1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) linked_ptr<CdmWrapper> cdm_; 1988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::string key_system_; 1998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If the CDM returned kDeferredInitialization during InitializeAudioDecoder() 2011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // or InitializeVideoDecoder(), the (Audio|Video)DecoderConfig.request_id is 2021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // saved for the future call to OnDeferredInitializationDone(). 2031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool deferred_initialize_audio_decoder_; 2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) uint32_t deferred_audio_decoder_config_id_; 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool deferred_initialize_video_decoder_; 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) uint32_t deferred_video_decoder_config_id_; 2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CdmAdapter); 2098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 2108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} // namespace media 2128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif // MEDIA_CDM_PPAPI_CDM_ADAPTER_H_ 214