Index: components/nacl/renderer/json_manifest.h |
diff --git a/components/nacl/renderer/json_manifest.h b/components/nacl/renderer/json_manifest.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d8885d36990f2f781680fe7867b861dc28e8607e |
--- /dev/null |
+++ b/components/nacl/renderer/json_manifest.h |
@@ -0,0 +1,73 @@ |
+// 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 <set> |
+#include <string> |
+ |
+#include "ppapi/c/pp_array_output.h" |
+#include "ppapi/c/private/ppb_nacl_private.h" |
+#include "third_party/jsoncpp/source/include/json/value.h" |
+ |
+namespace nacl { |
+class NexeLoadManager; |
+ |
+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); |
+ |
+ // 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; |
+ |
+ // 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 Json::Value& dictionary, |
+ const std::string& key, |
+ std::string* full_url, |
+ PP_PNaClOptions* pnacl_options) const; |
+ bool GetURLFromISADictionary(const Json::Value& 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(). |
+ Json::Value dictionary_; |
+}; |
+ |
+} // namespace nacl |
+ |
+#endif // COMPONENTS_NACL_RENDERER_JSON_MANIFEST_H |