190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/cpp/private/flash_drm.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/c/private/ppb_flash_device_id.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/c/private/ppb_flash_drm.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/cpp/module_impl.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace pp { 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace { 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)template <> const char* interface_name<PPB_Flash_DRM_1_0>() { 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return PPB_FLASH_DRM_INTERFACE_1_0; 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)template <> const char* interface_name<PPB_Flash_DRM_1_1>() { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PPB_FLASH_DRM_INTERFACE_1_1; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)template <> const char* interface_name<PPB_Flash_DeviceID_1_0>() { 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return PPB_FLASH_DEVICEID_INTERFACE_1_0; 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace flash { 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DRM::DRM() { 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DRM::DRM(const InstanceHandle& instance) : Resource() { 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_1>()) { 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PassRefFromConstructor(get_interface<PPB_Flash_DRM_1_1>()->Create( 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) instance.pp_instance())); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (has_interface<PPB_Flash_DRM_1_0>()) { 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PassRefFromConstructor(get_interface<PPB_Flash_DRM_1_0>()->Create( 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) instance.pp_instance())); 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } else if (has_interface<PPB_Flash_DeviceID_1_0>()) { 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PassRefFromConstructor(get_interface<PPB_Flash_DeviceID_1_0>()->Create( 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) instance.pp_instance())); 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int32_t DRM::GetDeviceID(const CompletionCallbackWithOutput<Var>& callback) { 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_1>()) { 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return get_interface<PPB_Flash_DRM_1_1>()->GetDeviceID( 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pp_resource(), 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.output(), 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.pp_completion_callback()); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_0>()) { 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return get_interface<PPB_Flash_DRM_1_0>()->GetDeviceID( 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) pp_resource(), 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.output(), 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.pp_completion_callback()); 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (has_interface<PPB_Flash_DeviceID_1_0>()) { 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return get_interface<PPB_Flash_DeviceID_1_0>()->GetDeviceID( 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) pp_resource(), 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.output(), 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback.pp_completion_callback()); 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return callback.MayForce(PP_ERROR_NOINTERFACE); 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool DRM::GetHmonitor(int64_t* hmonitor) { 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_1>()) { 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PP_ToBool(get_interface<PPB_Flash_DRM_1_1>()->GetHmonitor( 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pp_resource(), 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) hmonitor)); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_0>()) { 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_ToBool(get_interface<PPB_Flash_DRM_1_0>()->GetHmonitor( 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pp_resource(), 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) hmonitor)); 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return 0; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int32_t DRM::GetVoucherFile( 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const CompletionCallbackWithOutput<FileRef>& callback) { 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_1>()) { 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return get_interface<PPB_Flash_DRM_1_1>()->GetVoucherFile( 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pp_resource(), 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.output(), 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.pp_completion_callback()); 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_0>()) { 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return get_interface<PPB_Flash_DRM_1_0>()->GetVoucherFile( 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pp_resource(), 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) callback.output(), 967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) callback.pp_completion_callback()); 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return PP_ERROR_NOINTERFACE; 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int32_t DRM::MonitorIsExternal( 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const CompletionCallbackWithOutput<PP_Bool>& callback) { 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_interface<PPB_Flash_DRM_1_1>()) { 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return get_interface<PPB_Flash_DRM_1_1>()->MonitorIsExternal( 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pp_resource(), 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.output(), 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback.pp_completion_callback()); 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PP_ERROR_NOINTERFACE; 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace flash 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace pp 114