blob: 422cde77ed4c467e3b8729c8005bc6ba452298b4 [file]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_CONTENT_HASH_READER_H_
#define EXTENSIONS_BROWSER_CONTENT_HASH_READER_H_
#include <string>
#include <vector>
#include "base/files/file_path.h"
#include "base/memory/scoped_refptr.h"
#include "base/types/expected.h"
namespace extensions {
class ContentHash;
// The expected hashes for a single file.
struct ContentHashData {
ContentHashData(size_t block_size, std::vector<std::string> hashes);
~ContentHashData();
ContentHashData(const ContentHashData&) = delete;
ContentHashData& operator=(const ContentHashData&) = delete;
ContentHashData(ContentHashData&&);
ContentHashData& operator=(ContentHashData&&);
size_t block_size;
std::vector<std::string> hashes;
};
// Represents the failure status of fetching expected hashes for a file.
enum class ContentHashReaderInitStatus {
// Extension has no hashes for resources verification.
HASHES_MISSING,
// Extension has hashes files, but they are unreadable or corrupted.
HASHES_DAMAGED,
// Resource doesn't have entry in hashes.
NO_HASHES_FOR_RESOURCE,
// Extension has not attempted to fetch hashes yet.
FETCH_NOT_ATTEMPTED_YET,
};
// Reads expected hashes that may have been fetched/calculated by the
// ContentHashFetcher, and vends them out for use in ContentVerifyJob's.
// Returns the expected hashes for the file at `relative_path` within an
// extension, or an error status on failure.
base::expected<ContentHashData, ContentHashReaderInitStatus> ReadContentHashes(
const base::FilePath& relative_path,
const scoped_refptr<const ContentHash>& content_hash);
} // namespace extensions
#endif // EXTENSIONS_BROWSER_CONTENT_HASH_READER_H_