blob: 7d005396a43d29aee0af56179d4136ccbfb7eb73 [file] [log] [blame]
Xiyuan Xia7107d492019-06-05 16:58:541// Copyright 2016 The Chromium 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 ASH_SHUTDOWN_CONTROLLER_IMPL_H_
6#define ASH_SHUTDOWN_CONTROLLER_IMPL_H_
7
8#include "ash/ash_export.h"
9#include "ash/public/cpp/shutdown_controller.h"
10#include "base/macros.h"
11#include "base/observer_list.h"
12
13namespace ash {
14
15enum class ShutdownReason;
16
17// Handles actual device shutdown by making requests to powerd over D-Bus.
18// Caches the DeviceRebootOnShutdown device policy sent from Chrome.
19class ASH_EXPORT ShutdownControllerImpl : public ShutdownController {
20 public:
21 class Observer {
22 public:
23 virtual ~Observer() {}
24
25 // Called when shutdown policy changes.
26 virtual void OnShutdownPolicyChanged(bool reboot_on_shutdown) = 0;
27 };
28
29 ShutdownControllerImpl();
30 ~ShutdownControllerImpl() override;
31
32 void AddObserver(Observer* observer);
33 void RemoveObserver(Observer* observer);
34
35 bool reboot_on_shutdown() const { return reboot_on_shutdown_; }
36
37 // ShutdownController:
38 void SetRebootOnShutdown(bool reboot_on_shutdown) override;
39 void ShutDownOrReboot(ShutdownReason reason) override;
40
41 private:
42 // Cached copy of the DeviceRebootOnShutdown policy from chrome.
43 bool reboot_on_shutdown_ = false;
44
45 base::ObserverList<Observer>::Unchecked observers_;
46
47 DISALLOW_COPY_AND_ASSIGN(ShutdownControllerImpl);
48};
49
50} // namespace ash
51
52#endif // ASH_SHUTDOWN_CONTROLLER_IMPL_H_