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/proxy/flash_drm_resource.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/bind.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/proxy/dispatch_reply_message.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/proxy/file_ref_resource.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ppapi/shared_impl/var.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace ppapi { 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace proxy { 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)FlashDRMResource::FlashDRMResource(Connection connection, 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PP_Instance instance) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : PluginResource(connection, instance) { 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SendCreate(BROWSER, PpapiHostMsg_FlashDRM_Create()); 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SendCreate(RENDERER, PpapiHostMsg_FlashDRM_Create()); 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)FlashDRMResource::~FlashDRMResource() { 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)thunk::PPB_Flash_DRM_API* FlashDRMResource::AsPPB_Flash_DRM_API() { 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return this; 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int32_t FlashDRMResource::GetDeviceID(PP_Var* id, 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_refptr<TrackedCallback> callback) { 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!id) 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return PP_ERROR_BADARGUMENT; 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *id = PP_MakeUndefined(); 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Call<PpapiPluginMsg_FlashDRM_GetDeviceIDReply>( 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BROWSER, 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PpapiHostMsg_FlashDRM_GetDeviceID(), 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&FlashDRMResource::OnPluginMsgGetDeviceIDReply, this, 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) id, callback)); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return PP_OK_COMPLETIONPENDING; 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PP_Bool FlashDRMResource::GetHmonitor(int64_t* hmonitor) { 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int64_t hmonitor_out; 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int32_t result = SyncCall<PpapiPluginMsg_FlashDRM_GetHmonitorReply>( 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BROWSER, 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PpapiHostMsg_FlashDRM_GetHmonitor(), 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &hmonitor_out); 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (result != PP_OK) 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_FALSE; 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) *hmonitor = hmonitor_out; 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_TRUE; 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int32_t FlashDRMResource::GetVoucherFile( 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource* file_ref, 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<TrackedCallback> callback) { 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!file_ref) 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_ERROR_BADARGUMENT; 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) *file_ref = 0; 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Call<PpapiPluginMsg_FlashDRM_GetVoucherFileReply>( 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) RENDERER, 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PpapiHostMsg_FlashDRM_GetVoucherFile(), 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::Bind(&FlashDRMResource::OnPluginMsgGetVoucherFileReply, this, 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) file_ref, callback)); 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_OK_COMPLETIONPENDING; 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int32_t FlashDRMResource::MonitorIsExternal( 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PP_Bool* is_external, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<TrackedCallback> callback) { 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!is_external) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PP_ERROR_BADARGUMENT; 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *is_external = PP_FALSE; 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Call<PpapiPluginMsg_FlashDRM_MonitorIsExternalReply>( 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BROWSER, 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PpapiHostMsg_FlashDRM_MonitorIsExternal(), 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&FlashDRMResource::OnPluginMsgMonitorIsExternalReply, this, 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) is_external, callback)); 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PP_OK_COMPLETIONPENDING; 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void FlashDRMResource::OnPluginMsgGetDeviceIDReply( 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PP_Var* dest, 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_refptr<TrackedCallback> callback, 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const ResourceMessageReplyParams& params, 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& id) { 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (TrackedCallback::IsPending(callback)) { 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (params.result() == PP_OK) 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *dest = StringVar::StringToPPVar(id); 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) callback->Run(params.result()); 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void FlashDRMResource::OnPluginMsgGetVoucherFileReply( 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource* dest, 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_refptr<TrackedCallback> callback, 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const ResourceMessageReplyParams& params, 106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const FileRefCreateInfo& file_info) { 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (TrackedCallback::IsPending(callback)) { 108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (params.result() == PP_OK) { 109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) *dest = FileRefResource::CreateFileRef( 110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) connection(), 111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) pp_instance(), 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) file_info); 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) callback->Run(params.result()); 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FlashDRMResource::OnPluginMsgMonitorIsExternalReply( 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PP_Bool* dest, 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<TrackedCallback> callback, 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ResourceMessageReplyParams& params, 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PP_Bool is_external) { 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (TrackedCallback::IsPending(callback)) { 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (params.result() == PP_OK) 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *dest = is_external; 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callback->Run(params.result()); 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace proxy 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace ppapi 132