Commit 89a92d1a authored by Igor's avatar Igor Committed by Commit Bot

Log the reason when requesting to stop Chrome OS session

When the user session is stopped, we don't have access to user logs
anymore, yet it's important to have information on the reason why the
session was stopped.

BUG=chromium:1014538
TEST=Check that reason is logged at sign out.

Change-Id: I2869b000db5750cafba8566f8d1e13cb1c2369c4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1871673
Commit-Queue: Igor <igorcov@chromium.org>
Reviewed-by: default avatarIgor <igorcov@chromium.org>
Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarAchuith Bhandarkar <achuith@chromium.org>
Cr-Commit-Position: refs/heads/master@{#719068}
parent becffb54
......@@ -880,7 +880,8 @@ void ExistingUserController::OnAuthFailure(const AuthFailure& failure) {
base::PostDelayedTask(
FROM_HERE, {content::BrowserThread::UI},
base::BindOnce(&SessionTerminationManager::StopSession,
base::Unretained(SessionTerminationManager::Get())),
base::Unretained(SessionTerminationManager::Get()),
login_manager::SessionStopReason::OWNER_REQUIRED),
base::TimeDelta::FromMilliseconds(kSafeModeRestartUiDelayMs));
} else if (failure.reason() == AuthFailure::TPM_ERROR) {
ShowTPMError();
......
......@@ -596,7 +596,8 @@ void ScreenLocker::HandleShowLockScreenRequest() {
// screen while remaining secure in the case the user walks away during
// the sign-in steps. See crbug.com/112225 and crbug.com/110933.
VLOG(1) << "The user session cannot be locked, logging out";
SessionTerminationManager::Get()->StopSession();
SessionTerminationManager::Get()->StopSession(
login_manager::SessionStopReason::FAILED_TO_LOCK);
}
}
......
......@@ -2021,7 +2021,8 @@ void UserSessionManager::OnRestoreActiveSessions(
LOG(ERROR) << "Could not get list of active user sessions after crash.";
// If we could not get list of active user sessions it is safer to just
// sign out so that we don't get in the inconsistent state.
SessionTerminationManager::Get()->StopSession();
SessionTerminationManager::Get()->StopSession(
login_manager::SessionStopReason::RESTORE_ACTIVE_SESSIONS);
return;
}
......
......@@ -1072,7 +1072,8 @@ void WizardController::OnTermsOfServiceScreenExit(
break;
case TermsOfServiceScreen::Result::DECLINED:
// End the session and return to the login screen.
SessionManagerClient::Get()->StopSession();
SessionManagerClient::Get()->StopSession(
login_manager::SessionStopReason::TERMS_DECLINED);
break;
}
}
......
......@@ -66,7 +66,8 @@ void NotifyAndTerminate(bool fast_path, RebootPolicy reboot_policy) {
} else if (chrome::IsAttemptingShutdown()) {
// Don't ask SessionManager to stop session if the shutdown request comes
// from session manager.
chromeos::SessionTerminationManager::Get()->StopSession();
chromeos::SessionTerminationManager::Get()->StopSession(
login_manager::SessionStopReason::REQUEST_FROM_SESSION_MANAGER);
}
} else {
if (chrome::IsAttemptingShutdown()) {
......
......@@ -321,7 +321,8 @@ void FakeSessionManagerClient::StartSession(
user_sessions_[cryptohome_id.account_id()] = user_id_hash;
}
void FakeSessionManagerClient::StopSession() {
void FakeSessionManagerClient::StopSession(
login_manager::SessionStopReason reason) {
session_stopped_ = true;
}
......
......@@ -74,7 +74,7 @@ class COMPONENT_EXPORT(SESSION_MANAGER) FakeSessionManagerClient
void StartSession(
const cryptohome::AccountIdentifier& cryptohome_id) override;
void StopSession() override;
void StopSession(login_manager::SessionStopReason reason) override;
void StartDeviceWipe() override;
void StartRemoteDeviceWipe(
const enterprise_management::SignedData& signed_command) override;
......
......@@ -343,11 +343,12 @@ class SessionManagerClientImpl : public SessionManagerClient {
base::DoNothing());
}
void StopSession() override {
dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
login_manager::kSessionManagerStopSession);
void StopSession(login_manager::SessionStopReason reason) override {
dbus::MethodCall method_call(
login_manager::kSessionManagerInterface,
login_manager::kSessionManagerStopSessionWithReason);
dbus::MessageWriter writer(&method_call);
writer.AppendString(""); // Unique ID is deprecated
writer.AppendUint32(static_cast<uint32_t>(reason));
session_manager_proxy_->CallMethod(&method_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::DoNothing());
......
......@@ -203,7 +203,7 @@ class COMPONENT_EXPORT(SESSION_MANAGER) SessionManagerClient {
// Stops the current session. Don't call directly unless there's no user on
// the device. Use SessionTerminationManager::StopSession instead.
virtual void StopSession() = 0;
virtual void StopSession(login_manager::SessionStopReason reason) = 0;
// Starts the factory reset.
virtual void StartDeviceWipe() = 0;
......
......@@ -33,12 +33,13 @@ SessionTerminationManager* SessionTerminationManager::Get() {
return g_instance;
}
void SessionTerminationManager::StopSession() {
void SessionTerminationManager::StopSession(
login_manager::SessionStopReason reason) {
// If the device is locked to single user, it must reboot on sign out.
if (is_locked_to_single_user_) {
Reboot();
} else {
SessionManagerClient::Get()->StopSession();
SessionManagerClient::Get()->StopSession(reason);
}
}
......
......@@ -10,6 +10,7 @@
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "chromeos/dbus/cryptohome/rpc.pb.h"
#include "third_party/cros_system_api/dbus/login_manager/dbus-constants.h"
namespace chromeos {
......@@ -22,7 +23,7 @@ class COMPONENT_EXPORT(CHROMEOS_LOGIN_SESSION) SessionTerminationManager {
static SessionTerminationManager* Get();
// To be called instead of SessionManagerClient::StopSession.
void StopSession();
void StopSession(login_manager::SessionStopReason reason);
// To be called on login screen if the policy is set.
void RebootIfNecessary();
......
......@@ -36,7 +36,8 @@ class SessionTerminationManagerTest : public testing::Test {
// The device is not locked to single user. Check that no reboot is triggered
// on sign out.
TEST_F(SessionTerminationManagerTest, NoRebootTest) {
session_termination_manager_.StopSession();
session_termination_manager_.StopSession(
login_manager::SessionStopReason::OWNER_REQUIRED);
EXPECT_EQ(0, power_client_->num_request_restart_calls());
}
......@@ -44,7 +45,8 @@ TEST_F(SessionTerminationManagerTest, NoRebootTest) {
// sign out.
TEST_F(SessionTerminationManagerTest, RebootTest) {
session_termination_manager_.SetDeviceLockedToSingleUser();
session_termination_manager_.StopSession();
session_termination_manager_.StopSession(
login_manager::SessionStopReason::REQUEST_FROM_SESSION_MANAGER);
EXPECT_EQ(1, power_client_->num_request_restart_calls());
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment