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