|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H | 
|  | #define COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H | 
|  |  | 
|  | #include <memory> | 
|  | #include <set> | 
|  | #include <string> | 
|  | #include <utility> | 
|  |  | 
|  | #include "base/values.h" | 
|  | #include "components/nacl/renderer/ppb_nacl_private.h" | 
|  |  | 
|  | namespace nacl { | 
|  | class JsonManifest; | 
|  | struct NaClResourcePrefetchRequest; | 
|  |  | 
|  | class JsonManifest { | 
|  | public: | 
|  | struct ErrorInfo { | 
|  | PP_NaClError error; | 
|  | std::string string; | 
|  | }; | 
|  |  | 
|  | JsonManifest(const std::string& manifest_base_url, | 
|  | const std::string& sandbox_isa, | 
|  | bool nonsfi_enabled, | 
|  | bool pnacl_debug); | 
|  | ~JsonManifest(); | 
|  |  | 
|  | // Initialize the manifest object for use by later lookups. Returns | 
|  | // true if the manifest parses correctly and matches the schema. | 
|  | bool Init(const std::string& json_manifest, ErrorInfo* error_info); | 
|  |  | 
|  | // Gets the full program URL for the current sandbox ISA from the | 
|  | // manifest file. | 
|  | bool GetProgramURL(std::string* full_url, | 
|  | PP_PNaClOptions* pnacl_options, | 
|  | bool* uses_nonsfi_mode, | 
|  | ErrorInfo* error_info) const; | 
|  |  | 
|  | // Gets all the keys and their URLs in the "files" section that are | 
|  | // prefetchable. | 
|  | void GetPrefetchableFiles( | 
|  | std::vector<NaClResourcePrefetchRequest>* out_files) const; | 
|  |  | 
|  | // Resolves a key from the "files" section to a fully resolved URL, | 
|  | // i.e., relative URL values are fully expanded relative to the | 
|  | // manifest's URL (via ResolveURL). | 
|  | // If there was an error, details are reported via error_info. | 
|  | bool ResolveKey(const std::string& key, | 
|  | std::string* full_url, | 
|  | PP_PNaClOptions* pnacl_options) const; | 
|  |  | 
|  | private: | 
|  | bool MatchesSchema(ErrorInfo* error_info); | 
|  | bool GetKeyUrl(const base::DictionaryValue& dictionary, | 
|  | const std::string& key, | 
|  | std::string* full_url, | 
|  | PP_PNaClOptions* pnacl_options) const; | 
|  | bool GetURLFromISADictionary(const base::DictionaryValue& parent_dictionary, | 
|  | const std::string& parent_key, | 
|  | std::string* url, | 
|  | PP_PNaClOptions* pnacl_options, | 
|  | bool* uses_nonsfi_mode, | 
|  | ErrorInfo* error_info) const; | 
|  |  | 
|  | std::string manifest_base_url_; | 
|  | std::string sandbox_isa_; | 
|  | bool nonsfi_enabled_; | 
|  | bool pnacl_debug_; | 
|  |  | 
|  | // The dictionary of manifest information parsed in Init(). | 
|  | std::unique_ptr<base::DictionaryValue> dictionary_; | 
|  | }; | 
|  |  | 
|  | }  // namespace nacl | 
|  |  | 
|  | #endif  // COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H |