blob: 7cbbdb3583eb3232d161b5c0cbf7d22676ee3e3f [file] [log] [blame] [edit]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SPACED_DISK_USAGE_H_
#define SPACED_DISK_USAGE_H_
#include <vector>
#include <base/files/file_path.h>
#include <base/files/scoped_file.h>
#include <spaced/proto_bindings/spaced.pb.h>
namespace spaced {
// Abstract class that defines the interface for both disk usage util and its
// D-Bus proxy.
class DiskUsageUtil {
public:
virtual ~DiskUsageUtil() = default;
virtual int64_t GetFreeDiskSpace(const base::FilePath& path) = 0;
virtual int64_t GetTotalDiskSpace(const base::FilePath& path) = 0;
virtual int64_t GetRootDeviceSize() = 0;
// Quota-related operations.
virtual bool IsQuotaSupported(const base::FilePath& path) = 0;
virtual int64_t GetQuotaCurrentSpaceForUid(const base::FilePath& path,
uint32_t uid) = 0;
virtual int64_t GetQuotaCurrentSpaceForGid(const base::FilePath& path,
uint32_t gid) = 0;
virtual int64_t GetQuotaCurrentSpaceForProjectId(const base::FilePath& path,
uint32_t project_id) = 0;
virtual GetQuotaCurrentSpacesForIdsReply GetQuotaCurrentSpacesForIds(
const base::FilePath& path,
const std::vector<uint32_t>& uids,
const std::vector<uint32_t>& gids,
const std::vector<uint32_t>& project_ids) = 0;
virtual bool SetProjectId(const base::ScopedFD& path,
uint32_t project_id,
int* out_error) = 0;
virtual bool SetProjectInheritanceFlag(const base::ScopedFD& path,
bool enable,
int* out_error) = 0;
};
} // namespace spaced
#endif // SPACED_DISK_USAGE_H_