Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
index ac0e209d1feeeb2bff2acf6771628a022d58597a..0ac0d8ee474c88c9d4fca85856947f9d393c0711 100644 |
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc |
@@ -64,6 +64,8 @@ |
#include "chromeos/network/network_state.h" |
#include "chromeos/network/network_state_handler.h" |
#include "chromeos/network/portal_detector/network_portal_detector.h" |
+#include "chromeos/settings/cros_settings_names.h" |
+#include "chromeos/settings/cros_settings_provider.h" |
#include "components/user_manager/user.h" |
#include "components/user_manager/user_manager.h" |
#include "components/user_manager/user_type.h" |
@@ -325,6 +327,7 @@ void SigninScreenHandler::DeclareLocalizedValues( |
builder->Add("signinButton", IDS_LOGIN_BUTTON); |
builder->Add("launchAppButton", IDS_LAUNCH_APP_BUTTON); |
builder->Add("shutDown", IDS_SHUTDOWN_BUTTON); |
+ builder->Add("restart", IDS_REBOOT_BUTTON); |
builder->Add("addUser", IDS_ADD_USER_BUTTON); |
builder->Add("browseAsGuest", IDS_GO_INCOGNITO_BUTTON); |
builder->Add("cancel", IDS_CANCEL); |
@@ -742,6 +745,7 @@ void SigninScreenHandler::RegisterMessages() { |
AddRawCallback("offlineLogin", &SigninScreenHandler::HandleOfflineLogin); |
AddCallback("rebootSystem", &SigninScreenHandler::HandleRebootSystem); |
AddRawCallback("showAddUser", &SigninScreenHandler::HandleShowAddUser); |
+ AddCallback("restartSystem", &SigninScreenHandler::HandleRestartSystem); |
AddCallback("shutdownSystem", &SigninScreenHandler::HandleShutdownSystem); |
AddCallback("loadWallpaper", &SigninScreenHandler::HandleLoadWallpaper); |
AddCallback("removeUser", &SigninScreenHandler::HandleRemoveUser); |
@@ -1108,13 +1112,37 @@ void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) { |
UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL); |
} |
+void SigninScreenHandler::HandleRestartSystem() { |
+#if defined(USE_ATHENA) |
+ chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
+#else |
+ ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown( |
+ ash::LockStateController::RESTART); |
+#endif |
+} |
+ |
+void SigninScreenHandler::RequestShutdown() { |
+ CrosSettings* cros_settings = CrosSettings::Get(); |
+ CrosSettingsProvider::TrustedStatus status = |
+ cros_settings->PrepareTrustedValues( |
+ base::Bind(&SigninScreenHandler::RequestShutdown)); |
+ if (status != CrosSettingsProvider::TRUSTED) |
+ return; |
+ bool reboot_on_shutdown = false; |
+ cros_settings->GetBoolean(kRebootOnShutdown, &reboot_on_shutdown); |
+#if !defined(USE_ATHENA) |
+ ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown( |
+ reboot_on_shutdown ? ash::LockStateController::RESTART |
+ : ash::LockStateController::POWER_OFF); |
+#endif |
+} |
+ |
void SigninScreenHandler::HandleShutdownSystem() { |
#if defined(USE_ATHENA) |
chromeos::DBusThreadManager::Get()-> |
GetPowerManagerClient()->RequestShutdown(); |
#else |
- ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown( |
- ash::LockStateController::POWER_OFF); |
+ RequestShutdown(); |
#endif |
} |