15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/private/content_decryptor_private.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstring> // memcpy 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_var.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppb_content_decryptor_private.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppp_content_decryptor_private.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance_handle.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/logging.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/var.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ppapi/cpp/var_array.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kPPPContentDecryptorInterface[] = 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPP_CONTENTDECRYPTOR_PRIVATE_INTERFACE; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void Initialize(PP_Instance instance, 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PP_Var key_system_arg) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Var key_system_var(pp::PASS_REF, key_system_arg); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!key_system_var.is_string()) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->Initialize( 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key_system_var.AsString()); 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SetServerCertificate(PP_Instance instance, 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t promise_id, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var server_certificate_arg) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* object = 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!object) 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::Var server_certificate_var(server_certificate_arg); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!server_certificate_var.is_array_buffer()) 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::VarArrayBuffer server_certificate(server_certificate_var); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<ContentDecryptor_Private*>(object) 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->SetServerCertificate(promise_id, server_certificate); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void CreateSession(PP_Instance instance, 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t promise_id, 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var init_data_type_arg, 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var init_data_arg, 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_SessionType session_type) { 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void* object = 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!object) 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return; 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var init_data_type_var(pp::PASS_REF, init_data_type_arg); 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!init_data_type_var.is_string()) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Var init_data_var(pp::PASS_REF, init_data_arg); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!init_data_var.is_array_buffer()) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::VarArrayBuffer init_data_array_buffer(init_data_var); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object) 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ->CreateSession(promise_id, 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) init_data_type_var.AsString(), 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) init_data_array_buffer, 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) session_type); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void LoadSession(PP_Instance instance, 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t promise_id, 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PP_Var web_session_id_arg) { 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void* object = 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!object) 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id_arg); 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!web_session_id_var.is_string()) 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object) 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ->LoadSession(promise_id, web_session_id_var.AsString()); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void UpdateSession(PP_Instance instance, 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t promise_id, 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var web_session_id_arg, 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) PP_Var response_arg) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id_arg); 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!web_session_id_var.is_string()) 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var response_var(response_arg); 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!response_var.is_array_buffer()) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pp::VarArrayBuffer response(response_var); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object) 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ->UpdateSession(promise_id, web_session_id_var.AsString(), response); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CloseSession(PP_Instance instance, 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t promise_id, 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var web_session_id_arg) { 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* object = 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!object) 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::Var web_session_id_var(web_session_id_arg); 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!web_session_id_var.is_string()) 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<ContentDecryptor_Private*>(object) 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->CloseSession(promise_id, web_session_id_var.AsString()); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RemoveSession(PP_Instance instance, 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t promise_id, 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var web_session_id_arg) { 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* object = 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!object) 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::Var web_session_id_var(web_session_id_arg); 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!web_session_id_var.is_string()) 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<ContentDecryptor_Private*>(object) 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->RemoveSession(promise_id, web_session_id_var.AsString()); 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GetUsableKeyIds(PP_Instance instance, 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t promise_id, 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var web_session_id_arg) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id_arg); 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!web_session_id_var.is_string()) 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object) 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetUsableKeyIds(promise_id, web_session_id_var.AsString()); 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Decrypt(PP_Instance instance, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource encrypted_resource, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_EncryptedBlockInfo* encrypted_block_info) { 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp::Buffer_Dev encrypted_block(encrypted_resource); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->Decrypt( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encrypted_block, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *encrypted_block_info); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InitializeAudioDecoder( 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_AudioDecoderConfig* decoder_config, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource extra_data_resource) { 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp::Buffer_Dev extra_data_buffer(extra_data_resource); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->InitializeAudioDecoder( 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *decoder_config, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_data_buffer); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InitializeVideoDecoder( 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_VideoDecoderConfig* decoder_config, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource extra_data_resource) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp::Buffer_Dev extra_data_buffer(extra_data_resource); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->InitializeVideoDecoder( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *decoder_config, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_data_buffer); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeinitializeDecoder(PP_Instance instance, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_DecryptorStreamType decoder_type, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t request_id) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->DeinitializeDecoder( 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_type, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ResetDecoder(PP_Instance instance, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_DecryptorStreamType decoder_type, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t request_id) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->ResetDecoder(decoder_type, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecryptAndDecode(PP_Instance instance, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_DecryptorStreamType decoder_type, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource encrypted_resource, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_EncryptedBlockInfo* encrypted_block_info) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp::Buffer_Dev encrypted_buffer(encrypted_resource); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* object = 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::GetPerInstanceObject(instance, kPPPContentDecryptorInterface); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!object) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<ContentDecryptor_Private*>(object)->DecryptAndDecode( 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_type, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) encrypted_buffer, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *encrypted_block_info); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPP_ContentDecryptor_Private ppp_content_decryptor = { 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &Initialize, 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &SetServerCertificate, 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &CreateSession, 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &LoadSession, 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &UpdateSession, 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &CloseSession, 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &RemoveSession, 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &GetUsableKeyIds, 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &Decrypt, 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &InitializeAudioDecoder, 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &InitializeVideoDecoder, 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &DeinitializeDecoder, 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &ResetDecoder, 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &DecryptAndDecode}; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_ContentDecryptor_Private>() { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PPB_CONTENTDECRYPTOR_PRIVATE_INTERFACE; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentDecryptor_Private::ContentDecryptor_Private(Instance* instance) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : associated_instance_(instance) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Module::Get()->AddPluginInterface(kPPPContentDecryptorInterface, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ppp_content_decryptor); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance->AddPerInstanceObject(kPPPContentDecryptorInterface, this); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentDecryptor_Private::~ContentDecryptor_Private() { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Instance::RemovePerInstanceObject(associated_instance_, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPPPContentDecryptorInterface, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentDecryptor_Private::PromiseResolved(uint32_t promise_id) { 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->PromiseResolved( 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) associated_instance_.pp_instance(), promise_id); 297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentDecryptor_Private::PromiseResolvedWithSession( 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t promise_id, 302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& web_session_id) { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pp::Var web_session_id_var(web_session_id); 305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->PromiseResolvedWithSession( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) promise_id, 308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) web_session_id_var.pp_var()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ContentDecryptor_Private::PromiseResolvedWithKeyIds( 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32_t promise_id, 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<std::vector<uint8_t> >& key_ids) { 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (has_interface<PPB_ContentDecryptor_Private>()) { 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::VarArray key_ids_array = pp::VarArray(); 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci key_ids_array.SetLength(key_ids.size()); 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < key_ids.size(); ++i) { 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<uint8_t>& entry = key_ids[i]; 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::VarArrayBuffer array_buffer(entry.size()); 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci memcpy(array_buffer.Map(), &entry[0], entry.size()); 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci key_ids_array.Set(i, array_buffer); 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci get_interface<PPB_ContentDecryptor_Private>()->PromiseResolvedWithKeyIds( 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci associated_instance_.pp_instance(), promise_id, key_ids_array.pp_var()); 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentDecryptor_Private::PromiseRejected( 330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t promise_id, 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_CdmExceptionCode exception_code, 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t system_code, 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& error_description) { 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var error_description_var(error_description); 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->PromiseRejected( 337f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) associated_instance_.pp_instance(), 338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) promise_id, 339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) exception_code, 340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) system_code, 341f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) error_description_var.pp_var()); 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 34546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void ContentDecryptor_Private::SessionMessage( 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& web_session_id, 34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pp::VarArrayBuffer message, 34846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& destination_url) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id); 35146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pp::Var destination_url_var(destination_url); 352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->SessionMessage( 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 354f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) web_session_id_var.pp_var(), 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message.pp_var(), 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) destination_url_var.pp_var()); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ContentDecryptor_Private::SessionKeysChange( 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& web_session_id, 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool has_additional_usable_key) { 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (has_interface<PPB_ContentDecryptor_Private>()) { 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::Var web_session_id_var(web_session_id); 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci get_interface<PPB_ContentDecryptor_Private>()->SessionKeysChange( 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci associated_instance_.pp_instance(), 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_var.pp_var(), 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_FromBool(has_additional_usable_key)); 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ContentDecryptor_Private::SessionExpirationChange( 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& web_session_id, 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Time new_expiry_time) { 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (has_interface<PPB_ContentDecryptor_Private>()) { 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pp::Var web_session_id_var(web_session_id); 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci get_interface<PPB_ContentDecryptor_Private>()->SessionExpirationChange( 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci associated_instance_.pp_instance(), 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_var.pp_var(), 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new_expiry_time); 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentDecryptor_Private::SessionReady(const std::string& web_session_id) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id); 387a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->SessionReady( 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) associated_instance_.pp_instance(), web_session_id_var.pp_var()); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentDecryptor_Private::SessionClosed( 393f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& web_session_id) { 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 395f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id); 396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->SessionClosed( 397f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) associated_instance_.pp_instance(), web_session_id_var.pp_var()); 398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 399a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 401f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ContentDecryptor_Private::SessionError( 402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& web_session_id, 403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_CdmExceptionCode exception_code, 404f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32_t system_code, 405f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& error_description) { 406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 407f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var web_session_id_var(web_session_id); 408f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pp::Var error_description_var(error_description); 409a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->SessionError( 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) associated_instance_.pp_instance(), 411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) web_session_id_var.pp_var(), 412f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) exception_code, 413f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) system_code, 414f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) error_description_var.pp_var()); 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentDecryptor_Private::DeliverBlock( 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Buffer_Dev decrypted_block, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_DecryptedBlockInfo& decrypted_block_info) { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->DeliverBlock( 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decrypted_block.pp_resource(), 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &decrypted_block_info); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentDecryptor_Private::DecoderInitializeDone( 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_DecryptorStreamType decoder_type, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t request_id, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->DecoderInitializeDone( 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_type, 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(success)); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentDecryptor_Private::DecoderDeinitializeDone( 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_DecryptorStreamType decoder_type, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t request_id) { 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->DecoderDeinitializeDone( 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_type, 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentDecryptor_Private::DecoderResetDone( 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_DecryptorStreamType decoder_type, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t request_id) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->DecoderResetDone( 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_type, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentDecryptor_Private::DeliverFrame( 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Buffer_Dev decrypted_frame, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_DecryptedFrameInfo& decrypted_frame_info) { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->DeliverFrame( 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decrypted_frame.pp_resource(), 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &decrypted_frame_info); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentDecryptor_Private::DeliverSamples( 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pp::Buffer_Dev audio_frames, 4771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const PP_DecryptedSampleInfo& decrypted_sample_info) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_interface<PPB_ContentDecryptor_Private>()) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_interface<PPB_ContentDecryptor_Private>()->DeliverSamples( 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) associated_instance_.pp_instance(), 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) audio_frames.pp_resource(), 4821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &decrypted_sample_info); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace pp 487