1 /* 2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 * Use of this source code is governed by a BSD-style license that can be 4 * found in the LICENSE file. 5 */ 6 7 // Manifest interface class. 8 9 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_MANIFEST_H_ 10 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_MANIFEST_H_ 11 12 #include <map> 13 #include <set> 14 #include <string> 15 16 #include "native_client/src/include/nacl_macros.h" 17 #include "native_client/src/include/nacl_string.h" 18 #include "third_party/jsoncpp/source/include/json/value.h" 19 20 namespace pp { 21 class URLUtil_Dev; 22 } // namespace pp 23 24 namespace plugin { 25 26 class ErrorInfo; 27 class PnaclOptions; 28 29 class Manifest { 30 public: 31 Manifest() { } 32 virtual ~Manifest() { } 33 34 // A convention in the interfaces below regarding permit_extension_url: 35 // Some manifests (e.g., the pnacl coordinator manifest) need to access 36 // resources from an extension origin distinct from the plugin's origin 37 // (e.g., the pnacl coordinator needs to load llc, ld, and some libraries). 38 // This out-parameter is true if this manifest lookup confers access to 39 // a resource in the extension origin. 40 41 // Gets the full program URL for the current sandbox ISA from the 42 // manifest file. Fills in |pnacl_options| if the program requires 43 // PNaCl translation. 44 virtual bool GetProgramURL(nacl::string* full_url, 45 PnaclOptions* pnacl_options, 46 ErrorInfo* error_info) const = 0; 47 48 // Resolves a URL relative to the manifest base URL 49 virtual bool ResolveURL(const nacl::string& relative_url, 50 nacl::string* full_url, 51 ErrorInfo* error_info) const = 0; 52 53 // Gets the file names from the "files" section of the manifest. No 54 // checking that the keys' values are proper ISA dictionaries -- it 55 // is assumed that other consistency checks take care of that, and 56 // that the keys are appropriate for use with ResolveKey. 57 virtual bool GetFileKeys(std::set<nacl::string>* keys) const = 0; 58 59 // Resolves a key from the "files" section to a fully resolved URL, 60 // i.e., relative URL values are fully expanded relative to the 61 // manifest's URL (via ResolveURL). Fills in |pnacl_options| if 62 // the resolved key requires a pnacl translation step to obtain 63 // the final requested resource. 64 // If there was an error, details are reported via error_info. 65 virtual bool ResolveKey(const nacl::string& key, 66 nacl::string* full_url, 67 PnaclOptions* pnacl_options, 68 ErrorInfo* error_info) const = 0; 69 70 protected: 71 NACL_DISALLOW_COPY_AND_ASSIGN(Manifest); 72 }; 73 74 75 } // namespace plugin 76 77 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_MANIFEST_H_ 78