17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/renderer/pepper/pepper_flash_drm_renderer_host.h" 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/files/file_path.h" 858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/public/renderer/pepper_plugin_instance.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/renderer/renderer_ppapi_host.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/host/dispatch_host_message.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/host/host_message_context.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/host/ppapi_host.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// TODO(raymes): This is duplicated from pepper_flash_drm_host.cc but once 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// FileRef is refactored to the browser, it won't need to be. 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace { 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst char kVoucherFilename[] = "plugin.vch"; 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PepperFlashDRMRendererHost::PepperFlashDRMRendererHost( 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::RendererPpapiHost* host, 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Instance instance, 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) PP_Resource resource) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : ResourceHost(host->GetPpapiHost(), instance, resource), 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) renderer_ppapi_host_(host), 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch weak_factory_(this) {} 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochPepperFlashDRMRendererHost::~PepperFlashDRMRendererHost() {} 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int32_t PepperFlashDRMRendererHost::OnResourceMessageReceived( 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const IPC::Message& msg, 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ppapi::host::HostMessageContext* context) { 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PPAPI_BEGIN_MESSAGE_MAP(PepperFlashDRMRendererHost, msg) 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FlashDRM_GetVoucherFile, 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnGetVoucherFile) 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PPAPI_END_MESSAGE_MAP() 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_ERROR_FAILED; 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int32_t PepperFlashDRMRendererHost::OnGetVoucherFile( 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ppapi::host::HostMessageContext* context) { 4458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch content::PepperPluginInstance* plugin_instance = 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) renderer_ppapi_host_->GetPluginInstance(pp_instance()); 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!plugin_instance) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return PP_ERROR_FAILED; 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 49a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::FilePath plugin_dir = plugin_instance->GetModulePath().DirName(); 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(!plugin_dir.empty()); 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::FilePath voucher_file = plugin_dir.AppendASCII(kVoucherFilename); 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int renderer_pending_host_id = 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) plugin_instance->MakePendingFileRefRendererHost(voucher_file); 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (renderer_pending_host_id == 0) 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_ERROR_FAILED; 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::vector<IPC::Message> create_msgs; 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch create_msgs.push_back(PpapiHostMsg_FileRef_CreateForRawFS(voucher_file)); 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) renderer_ppapi_host_->CreateBrowserResourceHosts( 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) pp_instance(), 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) create_msgs, 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Bind(&PepperFlashDRMRendererHost::DidCreateFileRefHosts, 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) weak_factory_.GetWeakPtr(), 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) context->MakeReplyMessageContext(), 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) voucher_file, 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) renderer_pending_host_id)); 69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_OK_COMPLETIONPENDING; 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void PepperFlashDRMRendererHost::DidCreateFileRefHosts( 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const ppapi::host::ReplyMessageContext& reply_context, 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::FilePath& external_path, 75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int renderer_pending_host_id, 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<int>& browser_pending_host_ids) { 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch DCHECK_EQ(1U, browser_pending_host_ids.size()); 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch int browser_pending_host_id = browser_pending_host_ids[0]; 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ppapi::FileRefCreateInfo create_info = 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ppapi::MakeExternalFileRefCreateInfo(external_path, 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string(), 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) browser_pending_host_id, 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) renderer_pending_host_id); 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) host()->SendReply(reply_context, 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PpapiPluginMsg_FlashDRM_GetVoucherFileReply(create_info)); 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 88