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 processing for JSON manifests. 8 9 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_JSON_MANIFEST_H_ 10 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_JSON_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 "ppapi/native_client/src/trusted/plugin/manifest.h" 19 #include "third_party/jsoncpp/source/include/json/value.h" 20 21 namespace pp { 22 class URLUtil_Dev; 23 } // namespace pp 24 25 namespace plugin { 26 27 class ErrorInfo; 28 class PnaclOptions; 29 30 class JsonManifest : public Manifest { 31 public: 32 JsonManifest(const pp::URLUtil_Dev* url_util, 33 const nacl::string& manifest_base_url, 34 const nacl::string& sandbox_isa) 35 : url_util_(url_util), 36 manifest_base_url_(manifest_base_url), 37 sandbox_isa_(sandbox_isa), 38 dictionary_(Json::nullValue) { } 39 virtual ~JsonManifest() { } 40 41 // Initialize the manifest object for use by later lookups. The return 42 // value is true if the manifest parses correctly and matches the schema. 43 bool Init(const nacl::string& json, ErrorInfo* error_info); 44 45 // Gets the full program URL for the current sandbox ISA from the 46 // manifest file. 47 virtual bool GetProgramURL(nacl::string* full_url, 48 PnaclOptions* pnacl_options, 49 ErrorInfo* error_info) const; 50 51 // Resolves a URL relative to the manifest base URL 52 virtual bool ResolveURL(const nacl::string& relative_url, 53 nacl::string* full_url, 54 ErrorInfo* error_info) const; 55 56 // Gets the file names from the "files" section of the manifest. No 57 // checking that the keys' values are proper ISA dictionaries -- it 58 // is assumed that other consistency checks take care of that, and 59 // that the keys are appropriate for use with ResolveKey. 60 virtual bool GetFileKeys(std::set<nacl::string>* keys) const; 61 62 // Resolves a key from the "files" section to a fully resolved URL, 63 // i.e., relative URL values are fully expanded relative to the 64 // manifest's URL (via ResolveURL). 65 // If there was an error, details are reported via error_info. 66 virtual bool ResolveKey(const nacl::string& key, 67 nacl::string* full_url, 68 PnaclOptions* pnacl_options, 69 ErrorInfo* error_info) const; 70 71 private: 72 NACL_DISALLOW_COPY_AND_ASSIGN(JsonManifest); 73 74 // Checks that |dictionary_| is a valid manifest, according to the schema. 75 // Returns true on success, and sets |error_info| to a detailed message 76 // if not. 77 bool MatchesSchema(ErrorInfo* error_info); 78 79 const pp::URLUtil_Dev* url_util_; 80 nacl::string manifest_base_url_; 81 nacl::string sandbox_isa_; 82 83 Json::Value dictionary_; 84 }; 85 86 87 } // namespace plugin 88 89 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_JSON_MANIFEST_H_ 90