1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <set> 10*6777b538SAndroid Build Coastguard Worker #include <string> 11*6777b538SAndroid Build Coastguard Worker #include <utility> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "base/values.h" 14*6777b538SAndroid Build Coastguard Worker #include "components/nacl/renderer/ppb_nacl_private.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace nacl { 17*6777b538SAndroid Build Coastguard Worker class JsonManifest; 18*6777b538SAndroid Build Coastguard Worker struct NaClResourcePrefetchRequest; 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker class JsonManifest { 21*6777b538SAndroid Build Coastguard Worker public: 22*6777b538SAndroid Build Coastguard Worker struct ErrorInfo { 23*6777b538SAndroid Build Coastguard Worker PP_NaClError error; 24*6777b538SAndroid Build Coastguard Worker std::string string; 25*6777b538SAndroid Build Coastguard Worker }; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker JsonManifest(const std::string& manifest_base_url, 28*6777b538SAndroid Build Coastguard Worker const std::string& sandbox_isa, 29*6777b538SAndroid Build Coastguard Worker bool pnacl_debug); 30*6777b538SAndroid Build Coastguard Worker ~JsonManifest(); 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // Initialize the manifest object for use by later lookups. Returns 33*6777b538SAndroid Build Coastguard Worker // true if the manifest parses correctly and matches the schema. 34*6777b538SAndroid Build Coastguard Worker bool Init(const std::string& json_manifest, ErrorInfo* error_info); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Gets the full program URL for the current sandbox ISA from the 37*6777b538SAndroid Build Coastguard Worker // manifest file. 38*6777b538SAndroid Build Coastguard Worker bool GetProgramURL(std::string* full_url, 39*6777b538SAndroid Build Coastguard Worker PP_PNaClOptions* pnacl_options, 40*6777b538SAndroid Build Coastguard Worker ErrorInfo* error_info) const; 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker // Gets all the keys and their URLs in the "files" section that are 43*6777b538SAndroid Build Coastguard Worker // prefetchable. 44*6777b538SAndroid Build Coastguard Worker void GetPrefetchableFiles( 45*6777b538SAndroid Build Coastguard Worker std::vector<NaClResourcePrefetchRequest>* out_files) const; 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // Resolves a key from the "files" section to a fully resolved URL, 48*6777b538SAndroid Build Coastguard Worker // i.e., relative URL values are fully expanded relative to the 49*6777b538SAndroid Build Coastguard Worker // manifest's URL (via ResolveURL). 50*6777b538SAndroid Build Coastguard Worker // If there was an error, details are reported via error_info. 51*6777b538SAndroid Build Coastguard Worker bool ResolveKey(const std::string& key, 52*6777b538SAndroid Build Coastguard Worker std::string* full_url, 53*6777b538SAndroid Build Coastguard Worker PP_PNaClOptions* pnacl_options) const; 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker private: 56*6777b538SAndroid Build Coastguard Worker bool MatchesSchema(ErrorInfo* error_info); 57*6777b538SAndroid Build Coastguard Worker bool GetKeyUrl(const base::Value::Dict& dictionary, 58*6777b538SAndroid Build Coastguard Worker const std::string& key, 59*6777b538SAndroid Build Coastguard Worker std::string* full_url, 60*6777b538SAndroid Build Coastguard Worker PP_PNaClOptions* pnacl_options) const; 61*6777b538SAndroid Build Coastguard Worker bool GetURLFromISADictionary(const base::Value::Dict& parent_dictionary, 62*6777b538SAndroid Build Coastguard Worker const std::string& parent_key, 63*6777b538SAndroid Build Coastguard Worker std::string* url, 64*6777b538SAndroid Build Coastguard Worker PP_PNaClOptions* pnacl_options, 65*6777b538SAndroid Build Coastguard Worker ErrorInfo* error_info) const; 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker std::string manifest_base_url_; 68*6777b538SAndroid Build Coastguard Worker std::string sandbox_isa_; 69*6777b538SAndroid Build Coastguard Worker bool pnacl_debug_; 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker // The dictionary of manifest information parsed in Init(). 72*6777b538SAndroid Build Coastguard Worker base::Value::Dict dictionary_; 73*6777b538SAndroid Build Coastguard Worker }; 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker } // namespace nacl 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H_ 78