blob: 3e21b7d4067e275095a86174c39d9f7213480e34 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DLCSERVICE_UTILS_UTILS_INTERFACE_H_
#define DLCSERVICE_UTILS_UTILS_INTERFACE_H_
#include <memory>
#include <string>
#include <vector>
#include <base/files/file_path.h>
#include <brillo/brillo_export.h>
#include <libimageloader/manifest.h>
#include "dlcservice/types.h"
namespace dlcservice {
enum class BRILLO_EXPORT PartitionSlot {
A,
B,
};
class BRILLO_EXPORT UtilsInterface {
public:
UtilsInterface() = default;
virtual ~UtilsInterface() = default;
UtilsInterface(const UtilsInterface&) = delete;
UtilsInterface& operator=(const UtilsInterface&) = delete;
// Takes a DLC ID and returns the logical volume name based on slot.
virtual std::string LogicalVolumeName(const std::string& id,
PartitionSlot slot) = 0;
// Returns the DLC ID based off of logical volume name, returns empty when an
// invalid DLC logical volume name is given.
virtual std::string LogicalVolumeNameToId(const std::string& lv_name) = 0;
// Hashes the file at |path|.
// Pass zero or less for `size` to skip size check.
virtual bool HashFile(const base::FilePath& path,
int64_t size,
std::vector<uint8_t>* sha256,
bool skip_size_check = false) = 0;
// Retrieves the given DLC (id) manifest from metadata.
virtual std::shared_ptr<imageloader::Manifest> GetDlcManifest(
const std::string& id, const base::FilePath& dlc_manifest_path) = 0;
virtual DlcIdList GetSupportedDlcIds(const base::FilePath& metadata_path) = 0;
// Wrapper around `base::MakeAbsoluteFilePath`.
virtual base::FilePath MakeAbsoluteFilePath(const base::FilePath& path) = 0;
// Checks for the target GID at the target path.
virtual bool WaitForGid(const base::FilePath& target_path,
int target_gid) = 0;
};
} // namespace dlcservice
#endif // DLCSERVICE_UTILS_UTILS_INTERFACE_H_