Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef EXTENSIONS_BROWSER_COMPUTED_HASHES_H_
      6 #define EXTENSIONS_BROWSER_COMPUTED_HASHES_H_
      7 
      8 #include <map>
      9 #include <string>
     10 #include <vector>
     11 
     12 #include "base/values.h"
     13 
     14 namespace base {
     15 class FilePath;
     16 }
     17 
     18 namespace extensions {
     19 
     20 // A pair of classes for serialization of a set of SHA256 block hashes computed
     21 // over the files inside an extension.
     22 class ComputedHashes {
     23  public:
     24   class Reader {
     25    public:
     26     Reader();
     27     ~Reader();
     28     bool InitFromFile(const base::FilePath& path);
     29 
     30     // The block size and hashes for |relative_path| will be copied into the
     31     // out parameters.
     32     bool GetHashes(const base::FilePath& relative_path,
     33                    int* block_size,
     34                    std::vector<std::string>* hashes);
     35 
     36    private:
     37     typedef std::pair<int, std::vector<std::string> > HashInfo;
     38 
     39     // This maps a relative path to a pair of (block size, hashes)
     40     std::map<base::FilePath, HashInfo> data_;
     41   };
     42 
     43   class Writer {
     44    public:
     45     Writer();
     46     ~Writer();
     47 
     48     // Adds hashes for |relative_path|. Should not be called more than once
     49     // for a given |relative_path|.
     50     void AddHashes(const base::FilePath& relative_path,
     51                    int block_size,
     52                    const std::vector<std::string>& hashes);
     53 
     54     bool WriteToFile(const base::FilePath& path);
     55 
     56    private:
     57     // The top-level object that will be serialized as JSON.
     58     base::ListValue file_list_;
     59   };
     60 };
     61 
     62 }  // namespace extensions
     63 
     64 #endif  // EXTENSIONS_BROWSER_COMPUTED_HASHES_H_
     65