Home | History | Annotate | Download | only in plugin
      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