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