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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_RESOURCES_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_RESOURCES_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/nacl_macros.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/trusted/desc/nacl_desc_wrapper.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ppapi/c/private/ppb_nacl_private.h" 15a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "ppapi/cpp/completion_callback.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ppapi/native_client/src/trusted/plugin/plugin_error.h" 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace plugin { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Plugin; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Loads a list of resources, providing a way to get file descriptors for 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// these resources. URLs for resources are resolved by the manifest 25a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)// and point to pnacl component filesystem resources. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PnaclResources { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit PnaclResources(Plugin* plugin); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PnaclResources(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Read the resource info JSON file. This is the first step after 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // construction; it has to be completed before StartLoad is called. 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool ReadResourceInfo(); 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Start loading the resources. 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool StartLoad(); 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& GetLlcUrl() { return llc_tool_name_; } 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& GetLdUrl() { return ld_tool_name_; } 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PP_NaClFileInfo TakeLlcFileInfo(); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PP_NaClFileInfo TakeLdFileInfo(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NACL_DISALLOW_COPY_AND_ASSIGN(PnaclResources); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The plugin requesting the resource loading. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Plugin* plugin_; 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Tool names for llc and ld; read from the resource info file. 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string llc_tool_name_; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string ld_tool_name_; 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // File info for llc and ld executables, after they've been opened. 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Only valid after the callback for StartLoad() has been called, and until 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TakeLlcFileInfo()/TakeLdFileInfo() is called. 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PP_NaClFileInfo llc_file_info_; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PP_NaClFileInfo ld_file_info_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace plugin 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_RESOURCES_H_ 63