blob: a9f6cf0f705afd666dc9f0240f021c9af7d9496e [file] [log] [blame]
Omid Tourzan64856322020-08-28 13:51:03 +10001// Copyright 2020 The Chromium OS 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 CROS_DISKS_PARTITION_MANAGER_H_
6#define CROS_DISKS_PARTITION_MANAGER_H_
7
8#include <memory>
9#include <set>
10#include <string>
11
12#include <base/bind.h>
Omid Tourzan64856322020-08-28 13:51:03 +100013#include <base/memory/weak_ptr.h>
14#include <brillo/process/process_reaper.h>
15#include <chromeos/dbus/service_constants.h>
16#include <gtest/gtest_prod.h>
17
18#include "cros-disks/disk_monitor.h"
19#include "cros-disks/sandboxed_process.h"
20
21namespace cros_disks {
22
23using PartitionCompleteCallback =
24 base::OnceCallback<void(const base::FilePath&, PartitionErrorType)>;
25
26class PartitionManager {
27 public:
28 PartitionManager(brillo::ProcessReaper* process_reaper,
29 DiskMonitor* disk_monitor)
30 : process_reaper_(process_reaper), disk_monitor_(disk_monitor) {}
Qijiang Fan6bc59e12020-11-11 02:51:06 +090031 PartitionManager(const PartitionManager&) = delete;
32 PartitionManager& operator=(const PartitionManager&) = delete;
Omid Tourzan64856322020-08-28 13:51:03 +100033
34 virtual ~PartitionManager() = default;
35
36 // Starts a partition process of a given device to partition it into one
37 // partition.
38 void StartSinglePartitionFormat(const base::FilePath& device_path,
39 PartitionCompleteCallback callback);
40
41 protected:
42 // virtual to be used for testing purpose.
43 virtual std::unique_ptr<SandboxedProcess> CreateSandboxedProcess() const;
44
45 private:
46 void OnPartitionProcessTerminated(const base::FilePath& device_path,
47 PartitionCompleteCallback callback,
48 const siginfo_t& info);
49
50 brillo::ProcessReaper* process_reaper_;
51
52 // A list of outstanding partitioning processes indexed by device path.
53 std::set<base::FilePath> partition_process_;
54
55 DiskMonitor* disk_monitor_;
56
57 base::WeakPtrFactory<PartitionManager> weak_ptr_factory_{this};
Omid Tourzan64856322020-08-28 13:51:03 +100058};
59
60} // namespace cros_disks
61
62#endif // CROS_DISKS_PARTITION_MANAGER_H_