15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ppapi/native_client/src/trusted/plugin/pnacl_resources.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/portability_io.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/shared/platform/nacl_check.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/trusted/desc/nacl_desc_wrapper.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h" 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ppapi/native_client/src/trusted/plugin/plugin.h" 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ppapi/native_client/src/trusted/plugin/utility.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace plugin { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static const char kPnaclBaseUrl[] = "chrome://pnacl-translator/"; 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string GetFullUrl(const std::string& partial_url) { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return std::string(kPnaclBaseUrl) + GetNaClInterface()->GetSandboxArch() + 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "/" + partial_url; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPnaclResources::PnaclResources(Plugin* plugin) 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : plugin_(plugin) { 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch llc_file_info_ = kInvalidNaClFileInfo; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ld_file_info_ = kInvalidNaClFileInfo; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PnaclResources::~PnaclResources() { 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (llc_file_info_.handle != PP_kInvalidFileHandle) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CloseFileHandle(llc_file_info_.handle); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ld_file_info_.handle != PP_kInvalidFileHandle) 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CloseFileHandle(ld_file_info_.handle); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool PnaclResources::ReadResourceInfo() { 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PP_Var pp_llc_tool_name_var; 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PP_Var pp_ld_tool_name_var; 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!plugin_->nacl_interface()->GetPnaclResourceInfo( 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) plugin_->pp_instance(), 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &pp_llc_tool_name_var, 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &pp_ld_tool_name_var)) { 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) pp::Var llc_tool_name(pp::PASS_REF, pp_llc_tool_name_var); 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) pp::Var ld_tool_name(pp::PASS_REF, pp_ld_tool_name_var); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) llc_tool_name_ = GetFullUrl(llc_tool_name.AsString()); 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ld_tool_name_ = GetFullUrl(ld_tool_name.AsString()); 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPP_NaClFileInfo PnaclResources::TakeLlcFileInfo() { 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PP_NaClFileInfo to_return = llc_file_info_; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch llc_file_info_ = kInvalidNaClFileInfo; 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return to_return; 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 62116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPP_NaClFileInfo PnaclResources::TakeLdFileInfo() { 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PP_NaClFileInfo to_return = ld_file_info_; 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ld_file_info_ = kInvalidNaClFileInfo; 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return to_return; 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool PnaclResources::StartLoad() { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PLUGIN_PRINTF(("PnaclResources::StartLoad\n")); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Do a blocking load of each of the resources. 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch plugin_->nacl_interface()->GetReadExecPnaclFd(llc_tool_name_.c_str(), 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &llc_file_info_); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch plugin_->nacl_interface()->GetReadExecPnaclFd(ld_tool_name_.c_str(), 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &ld_file_info_); 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return (llc_file_info_.handle != PP_kInvalidFileHandle && 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ld_file_info_.handle != PP_kInvalidFileHandle); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace plugin 81