chromium/ash/public/cpp/shutdown_controller.h

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

#ifndef ASH_PUBLIC_CPP_SHUTDOWN_CONTROLLER_H_
#define ASH_PUBLIC_CPP_SHUTDOWN_CONTROLLER_H_

#include "ash/public/cpp/ash_public_export.h"
#include "ash/public/cpp/scoped_singleton_resetter_for_test.h"

namespace ash {

enum class ShutdownReason;

// Interface implemented by ash and used by chrome to provide shutdown policy
// information. Exists because device policy is owned by chrome, not ash.
class ASH_PUBLIC_EXPORT ShutdownController {
 public:
  using ScopedResetterForTest =
      ScopedSingletonResetterForTest<ShutdownController>;

  // Gets the singleton ShutdownController instance.
  static ShutdownController* Get();

  // Sets a boolean pref that indicates whether the device automatically reboots
  // when the user initiates a shutdown via an UI element. Used in enterprise
  // environments for devices that should not be shut down.
  virtual void SetRebootOnShutdown(bool reboot_on_shutdown) = 0;

  // 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 void ShutDownOrReboot(ShutdownReason reason) = 0;

 protected:
  ShutdownController();
  virtual ~ShutdownController();
};

}  // namespace ash

#endif  // ASH_PUBLIC_CPP_SHUTDOWN_CONTROLLER_H_