1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // 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.
- #include "ash/shutdown_controller_impl.h"
- #include <utility>
- #include "ash/session/session_controller_impl.h"
- #include "ash/shell.h"
- #include "ash/shutdown_reason.h"
- #include "base/metrics/user_metrics.h"
- #include "base/strings/stringprintf.h"
- #include "base/system/sys_info.h"
- #include "chromeos/dbus/power/power_manager_client.h"
- #include "third_party/cros_system_api/dbus/service_constants.h"
- namespace ash {
- ShutdownControllerImpl::ShutdownControllerImpl() = default;
- ShutdownControllerImpl::~ShutdownControllerImpl() = default;
- void ShutdownControllerImpl::AddObserver(Observer* observer) {
- observers_.AddObserver(observer);
- }
- void ShutdownControllerImpl::RemoveObserver(Observer* observer) {
- observers_.RemoveObserver(observer);
- }
- void ShutdownControllerImpl::SetRebootOnShutdown(bool reboot_on_shutdown) {
- if (reboot_on_shutdown_ == reboot_on_shutdown)
- return;
- reboot_on_shutdown_ = reboot_on_shutdown;
- for (auto& observer : observers_)
- observer.OnShutdownPolicyChanged(reboot_on_shutdown_);
- }
- void ShutdownControllerImpl::ShutDownOrReboot(ShutdownReason reason) {
- // For developers on Linux desktop just exit the app.
- if (!base::SysInfo::IsRunningOnChromeOS()) {
- Shell::Get()->session_controller()->RequestSignOut();
- return;
- }
- if (reason == ShutdownReason::POWER_BUTTON)
- base::RecordAction(base::UserMetricsAction("Accel_ShutDown_PowerButton"));
- // On real Chrome OS hardware the power manager handles shutdown.
- std::string description = base::StringPrintf("UI request from ash: %s",
- ShutdownReasonToString(reason));
- if (reboot_on_shutdown_) {
- chromeos::PowerManagerClient::Get()->RequestRestart(
- power_manager::REQUEST_RESTART_FOR_USER, description);
- } else {
- chromeos::PowerManagerClient::Get()->RequestShutdown(
- power_manager::REQUEST_SHUTDOWN_FOR_USER, description);
- }
- }
- } // namespace ash
|