Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / extensions / browser / computed_hashes.h
blobc5e2052b8602a678e8587a5d8b19f67bf587b74c
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.
5 #ifndef EXTENSIONS_BROWSER_COMPUTED_HASHES_H_
6 #define EXTENSIONS_BROWSER_COMPUTED_HASHES_H_
8 #include <map>
9 #include <string>
10 #include <vector>
12 #include "base/memory/scoped_ptr.h"
14 namespace base {
15 class FilePath;
16 class ListValue;
19 namespace extensions {
21 // A pair of classes for serialization of a set of SHA256 block hashes computed
22 // over the files inside an extension.
23 class ComputedHashes {
24 public:
25 class Reader {
26 public:
27 Reader();
28 ~Reader();
29 bool InitFromFile(const base::FilePath& path);
31 // The block size and hashes for |relative_path| will be copied into the
32 // out parameters.
33 bool GetHashes(const base::FilePath& relative_path,
34 int* block_size,
35 std::vector<std::string>* hashes);
37 private:
38 typedef std::pair<int, std::vector<std::string> > HashInfo;
40 // This maps a relative path to a pair of (block size, hashes)
41 std::map<base::FilePath, HashInfo> data_;
44 class Writer {
45 public:
46 Writer();
47 ~Writer();
49 // Adds hashes for |relative_path|. Should not be called more than once
50 // for a given |relative_path|.
51 void AddHashes(const base::FilePath& relative_path,
52 int block_size,
53 const std::vector<std::string>& hashes);
55 bool WriteToFile(const base::FilePath& path);
57 private:
58 // Each element of this list contains the path and block hashes for one
59 // file.
60 scoped_ptr<base::ListValue> file_list_;
63 // Computes the SHA256 hash of each |block_size| chunk in |contents|, placing
64 // the results into |hashes|.
65 static void ComputeHashesForContent(const std::string& contents,
66 size_t block_size,
67 std::vector<std::string>* hashes);
70 } // namespace extensions
72 #endif // EXTENSIONS_BROWSER_COMPUTED_HASHES_H_