// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/renderer/pepper/pepper_flash_drm_renderer_host.h" #include "base/files/file_path.h" #include "content/public/renderer/pepper_plugin_instance.h" #include "content/public/renderer/renderer_ppapi_host.h" #include "ppapi/c/pp_errors.h" #include "ppapi/host/dispatch_host_message.h" #include "ppapi/host/host_message_context.h" #include "ppapi/host/ppapi_host.h" #include "ppapi/proxy/ppapi_messages.h" // TODO(raymes): This is duplicated from pepper_flash_drm_host.cc but once // FileRef is refactored to the browser, it won't need to be. namespace { const char kVoucherFilename[] = "plugin.vch"; } // namespace PepperFlashDRMRendererHost::PepperFlashDRMRendererHost( content::RendererPpapiHost* host, PP_Instance instance, PP_Resource resource) : ResourceHost(host->GetPpapiHost(), instance, resource), renderer_ppapi_host_(host), weak_factory_(this) {} PepperFlashDRMRendererHost::~PepperFlashDRMRendererHost() {} int32_t PepperFlashDRMRendererHost::OnResourceMessageReceived( const IPC::Message& msg, ppapi::host::HostMessageContext* context) { PPAPI_BEGIN_MESSAGE_MAP(PepperFlashDRMRendererHost, msg) PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_FlashDRM_GetVoucherFile, OnGetVoucherFile) PPAPI_END_MESSAGE_MAP() return PP_ERROR_FAILED; } int32_t PepperFlashDRMRendererHost::OnGetVoucherFile( ppapi::host::HostMessageContext* context) { content::PepperPluginInstance* plugin_instance = renderer_ppapi_host_->GetPluginInstance(pp_instance()); if (!plugin_instance) return PP_ERROR_FAILED; base::FilePath plugin_dir = plugin_instance->GetModulePath().DirName(); DCHECK(!plugin_dir.empty()); base::FilePath voucher_file = plugin_dir.AppendASCII(kVoucherFilename); int renderer_pending_host_id = plugin_instance->MakePendingFileRefRendererHost(voucher_file); if (renderer_pending_host_id == 0) return PP_ERROR_FAILED; std::vector create_msgs; create_msgs.push_back(PpapiHostMsg_FileRef_CreateForRawFS(voucher_file)); renderer_ppapi_host_->CreateBrowserResourceHosts( pp_instance(), create_msgs, base::Bind(&PepperFlashDRMRendererHost::DidCreateFileRefHosts, weak_factory_.GetWeakPtr(), context->MakeReplyMessageContext(), voucher_file, renderer_pending_host_id)); return PP_OK_COMPLETIONPENDING; } void PepperFlashDRMRendererHost::DidCreateFileRefHosts( const ppapi::host::ReplyMessageContext& reply_context, const base::FilePath& external_path, int renderer_pending_host_id, const std::vector& browser_pending_host_ids) { DCHECK_EQ(1U, browser_pending_host_ids.size()); int browser_pending_host_id = browser_pending_host_ids[0]; ppapi::FileRefCreateInfo create_info = ppapi::MakeExternalFileRefCreateInfo(external_path, std::string(), browser_pending_host_id, renderer_pending_host_id); host()->SendReply(reply_context, PpapiPluginMsg_FlashDRM_GetVoucherFileReply(create_info)); }