// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_DISKS_SUSPEND_UNMOUNT_MANAGER_H_
#define CHROMEOS_DISKS_SUSPEND_UNMOUNT_MANAGER_H_

#include <set>
#include <string>

#include "base/component_export.h"
#include "base/macros.h"
#include "chromeos/dbus/cros_disks_client.h"
#include "chromeos/dbus/power_manager_client.h"

namespace chromeos {
namespace disks {

class DiskMountManager;

// Class to unmount disks at suspend.
class COMPONENT_EXPORT(CHROMEOS_DISKS) SuspendUnmountManager
    : public PowerManagerClient::Observer {
 public:
  // The ownership of these raw pointers still remains with the caller.
  explicit SuspendUnmountManager(DiskMountManager* disk_mount_manager);
  ~SuspendUnmountManager() override;

 private:
  void OnUnmountComplete(const std::string& mount_path,
                         chromeos::MountError error_code);

  // PowerManagerClient::Observer
  void SuspendImminent(power_manager::SuspendImminent::Reason reason) override;
  void SuspendDone(const base::TimeDelta& sleep_duration) override;

  // Callback passed to DiskMountManager holds weak pointers of this.
  DiskMountManager* const disk_mount_manager_;

  // The paths that the manager currently tries to unmount for suspend.
  std::set<std::string> unmounting_paths_;

  base::Closure suspend_readiness_callback_;

  base::WeakPtrFactory<SuspendUnmountManager> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(SuspendUnmountManager);
};

}  // namespace disks
}  // namespace chromeos

#endif  // CHROMEOS_DISKS_SUSPEND_UNMOUNT_MANAGER_H_
