blob: e29cb082d0d874c565b87add0c590d69e216396a [file] [log] [blame]
// 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 "base/unguessable_token.h"
#include "chromeos/dbus/cros_disks_client.h"
#include "chromeos/dbus/power/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::UnguessableToken block_suspend_token_;
base::WeakPtrFactory<SuspendUnmountManager> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(SuspendUnmountManager);
};
} // namespace disks
} // namespace chromeos
#endif // CHROMEOS_DISKS_SUSPEND_UNMOUNT_MANAGER_H_