blob: 49c7b75817b4ca5211f2c88f9ba3f1ad7005232a [file] [log] [blame]
// Copyright 2016 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 ASH_SHUTDOWN_CONTROLLER_H_
#define ASH_SHUTDOWN_CONTROLLER_H_
#include "ash/ash_export.h"
#include "ash/public/interfaces/shutdown.mojom.h"
#include "base/macros.h"
#include "base/observer_list.h"
#include "mojo/public/cpp/bindings/binding_set.h"
namespace ash {
enum class ShutdownReason;
// Handles actual device shutdown by making requests to powerd over D-Bus.
// Caches the DeviceRebootOnShutdown device policy sent from Chrome over mojo.
class ASH_EXPORT ShutdownController : public mojom::ShutdownController {
public:
class Observer {
public:
virtual ~Observer() {}
// Called when shutdown policy changes.
virtual void OnShutdownPolicyChanged(bool reboot_on_shutdown) = 0;
};
ShutdownController();
~ShutdownController() override;
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
bool reboot_on_shutdown() const { return reboot_on_shutdown_; }
// Shuts down or reboots based on the current DeviceRebootOnShutdown policy.
// Does not trigger the shutdown fade-out animation. For animated shutdown
// use LockStateController::RequestShutdown(). Virtual for testing.
virtual void ShutDownOrReboot(ShutdownReason reason);
// Binds the mojom::ShutdownController interface request to this object.
void BindRequest(mojom::ShutdownControllerRequest request);
// Sets the reboot policy. Used for testing only.
void SetRebootOnShutdownForTesting(bool reboot_on_shutdown);
private:
// mojom::ShutdownController:
void SetRebootOnShutdown(bool reboot_on_shutdown) override;
void RequestShutdownFromLoginScreen() override;
// Cached copy of the DeviceRebootOnShutdown policy from chrome.
bool reboot_on_shutdown_ = false;
base::ObserverList<Observer>::Unchecked observers_;
// Bindings for the ShutdownController interface.
mojo::BindingSet<mojom::ShutdownController> bindings_;
DISALLOW_COPY_AND_ASSIGN(ShutdownController);
};
} // namespace ash
#endif // ASH_SHUTDOWN_CONTROLLER_H_