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