| // Copyright 2017 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 "chromeos/login/login_state/scoped_test_public_session_login_state.h" |
| |
| namespace chromeos { |
| |
| namespace { |
| |
| bool g_instance_exists = false; |
| |
| } // namespace |
| |
| ScopedTestPublicSessionLoginState::ScopedTestPublicSessionLoginState( |
| LoginState::LoggedInUserType user_type) { |
| // Sanity check - allow only public session state. |
| CHECK(user_type == LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT || |
| user_type == LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED); |
| // Allow only one instance of this class. |
| CHECK(!g_instance_exists); |
| g_instance_exists = true; |
| |
| // Set Public Session state. |
| if (!LoginState::IsInitialized()) { |
| LoginState::Initialize(); |
| needs_shutdown_ = true; |
| } |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, user_type); |
| } |
| |
| ScopedTestPublicSessionLoginState::~ScopedTestPublicSessionLoginState() { |
| // Reset state at the end of test. |
| LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_NONE, |
| LoginState::LOGGED_IN_USER_NONE); |
| if (needs_shutdown_) |
| LoginState::Shutdown(); |
| |
| g_instance_exists = false; |
| } |
| |
| } // namespace chromeos |