Commit a35a7fe2 authored by A Olsen's avatar A Olsen Committed by Commit Bot

SystemSettingsProvider dep back to LoginState

SystemSettingProvider had a dep on both LoginState and ProfileManager,
in order to check if the user had permission to change the timezone.
ProfileManager is in chrome/browser and I am trying to remove
chrome/browser deps, so I changed the code to use only UserManager.
See https://chromium-review.googlesource.com/1238450

I realized afterwards that UserManager deps are also currently not
allowed in src/chromeos, where this code will soon live. Rather than
expand the list of deps (which should be kept small), I have updated
LoginState so that only it is needed here (instead of ProfileManager or
UserManager). So, the last change is no longer needed, and is reverted.

I also tidied up conversion code in ChromeUserManager slightly -
Moving if-else-else chain into a helper function with switch + return
means that the compiler checks that all cases are handled.

Bug: 446937
Change-Id: I3aa44cacdef752f997d12b647d6e073f806371d3
Reviewed-on: https://chromium-review.googlesource.com/1249209Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: A Olsen <olsen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595777}
parent 407a6141
......@@ -22,7 +22,7 @@
namespace chromeos {
namespace {
bool IsManagedSessionEnabled(const user_manager::User* active_user) {
bool IsManagedSessionEnabled(const user_manager::User& active_user) {
// If the service doesn't exist or the policy is not set, enable managed
// session by default.
const bool managed_session_enabled_by_default = true;
......@@ -35,7 +35,7 @@ bool IsManagedSessionEnabled(const user_manager::User* active_user) {
return managed_session_enabled_by_default;
const policy::PolicyMap::Entry* entry =
service->GetBrokerForUser(active_user->GetAccountId().GetUserEmail())
service->GetBrokerForUser(active_user.GetAccountId().GetUserEmail())
->core()
->store()
->policy_map()
......@@ -47,6 +47,40 @@ bool IsManagedSessionEnabled(const user_manager::User* active_user) {
return entry && entry->value && entry->value->GetBool();
}
LoginState::LoggedInUserType GetLoggedInUserType(
const user_manager::User& active_user,
bool is_current_user_owner) {
if (is_current_user_owner)
return LoginState::LOGGED_IN_USER_OWNER;
switch (active_user.GetType()) {
case user_manager::USER_TYPE_REGULAR:
return LoginState::LOGGED_IN_USER_REGULAR;
case user_manager::USER_TYPE_GUEST:
return LoginState::LOGGED_IN_USER_GUEST;
case user_manager::USER_TYPE_PUBLIC_ACCOUNT:
return IsManagedSessionEnabled(active_user)
? LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED
: LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT;
case user_manager::USER_TYPE_SUPERVISED:
return LoginState::LOGGED_IN_USER_SUPERVISED;
case user_manager::USER_TYPE_KIOSK_APP:
return LoginState::LOGGED_IN_USER_KIOSK_APP;
case user_manager::USER_TYPE_CHILD:
return LoginState::LOGGED_IN_USER_CHILD;
case user_manager::USER_TYPE_ARC_KIOSK_APP:
return LoginState::LOGGED_IN_USER_ARC_KIOSK_APP;
case user_manager::USER_TYPE_ACTIVE_DIRECTORY:
// NOTE(olsen) There's no LOGGED_IN_USER_ACTIVE_DIRECTORY - is it needed?
return LoginState::LOGGED_IN_USER_REGULAR;
case user_manager::NUM_USER_TYPES:
break; // Go to invalid-type handling code.
// Since there is no default, the compiler warns about unhandled types.
}
NOTREACHED() << "Invalid type for active user: " << active_user.GetType();
return LoginState::LOGGED_IN_USER_REGULAR;
}
} // namespace
ChromeUserManager::ChromeUserManager(
......@@ -70,37 +104,22 @@ void ChromeUserManager::UpdateLoginState(const user_manager::User* active_user,
if (!LoginState::IsInitialized())
return; // LoginState may be uninitialized in tests.
chromeos::LoginState::LoggedInState logged_in_state;
logged_in_state = active_user ? chromeos::LoginState::LOGGED_IN_ACTIVE
: chromeos::LoginState::LOGGED_IN_NONE;
chromeos::LoginState::LoggedInUserType login_user_type;
if (logged_in_state == chromeos::LoginState::LOGGED_IN_NONE) {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_NONE;
} else if (is_current_user_owner) {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_OWNER;
} else if (active_user->GetType() == user_manager::USER_TYPE_GUEST) {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_GUEST;
} else if (active_user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
login_user_type =
IsManagedSessionEnabled(active_user)
? chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED
: chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT;
} else if (active_user->GetType() == user_manager::USER_TYPE_SUPERVISED) {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_SUPERVISED;
} else if (active_user->GetType() == user_manager::USER_TYPE_KIOSK_APP) {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_KIOSK_APP;
} else if (active_user->GetType() == user_manager::USER_TYPE_ARC_KIOSK_APP) {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_ARC_KIOSK_APP;
LoginState::LoggedInState logged_in_state;
LoginState::LoggedInUserType logged_in_user_type;
if (active_user) {
logged_in_state = LoginState::LOGGED_IN_ACTIVE;
logged_in_user_type =
GetLoggedInUserType(*active_user, is_current_user_owner);
} else {
login_user_type = chromeos::LoginState::LOGGED_IN_USER_REGULAR;
logged_in_state = LoginState::LOGGED_IN_NONE;
logged_in_user_type = LoginState::LOGGED_IN_USER_NONE;
}
if (primary_user) {
LoginState::Get()->SetLoggedInStateAndPrimaryUser(
logged_in_state, login_user_type, primary_user->username_hash());
logged_in_state, logged_in_user_type, primary_user->username_hash());
} else {
LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type);
LoginState::Get()->SetLoggedInState(logged_in_state, logged_in_user_type);
}
}
......
......@@ -8,8 +8,8 @@
#include "base/time/time.h"
#include "base/values.h"
#include "chrome/browser/chromeos/system/timezone_util.h"
#include "chromeos/login/login_state.h"
#include "chromeos/settings/cros_settings_names.h"
#include "components/user_manager/user_manager.h"
namespace chromeos {
......@@ -33,14 +33,11 @@ SystemSettingsProvider::~SystemSettingsProvider() {
void SystemSettingsProvider::DoSet(const std::string& path,
const base::Value& in_value) {
user_manager::User* user = user_manager::UserManager::Get()->GetActiveUser();
if (!user || !user->is_logged_in())
return;
user_manager::UserType userType = user->GetType();
// Guest, child, or public accounts cannot change the time zone.
if (userType == user_manager::USER_TYPE_GUEST ||
userType == user_manager::USER_TYPE_CHILD ||
userType == user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
// Guest, public, or child accounts cannot change the time zone.
if (!LoginState::Get()->IsUserLoggedIn() ||
LoginState::Get()->IsGuestSessionUser() ||
LoginState::Get()->IsPublicSessionUser() ||
LoginState::Get()->IsChildUser()) {
return;
}
......
......@@ -287,6 +287,8 @@ bool EnrollmentDialogAllowed(Profile* profile) {
return false;
case LoginState::LOGGED_IN_USER_ARC_KIOSK_APP:
return false;
case LoginState::LOGGED_IN_USER_CHILD:
return true;
}
NOTREACHED();
return false;
......
......@@ -110,6 +110,10 @@ bool LoginState::IsKioskApp() const {
return logged_in_user_type_ == LOGGED_IN_USER_KIOSK_APP;
}
bool LoginState::IsChildUser() const {
return logged_in_user_type_ == LOGGED_IN_USER_CHILD;
}
bool LoginState::UserHasNetworkProfile() const {
if (!IsUserLoggedIn())
return false;
......@@ -119,12 +123,14 @@ bool LoginState::UserHasNetworkProfile() const {
bool LoginState::IsUserAuthenticated() const {
return logged_in_user_type_ == LOGGED_IN_USER_REGULAR ||
logged_in_user_type_ == LOGGED_IN_USER_OWNER ||
logged_in_user_type_ == LOGGED_IN_USER_SUPERVISED;
logged_in_user_type_ == LOGGED_IN_USER_SUPERVISED ||
logged_in_user_type_ == LOGGED_IN_USER_CHILD;
}
bool LoginState::IsUserGaiaAuthenticated() const {
return logged_in_user_type_ == LOGGED_IN_USER_REGULAR ||
logged_in_user_type_ == LOGGED_IN_USER_OWNER;
logged_in_user_type_ == LOGGED_IN_USER_OWNER ||
logged_in_user_type_ == LOGGED_IN_USER_CHILD;
}
// Private methods
......
......@@ -29,7 +29,8 @@ class CHROMEOS_EXPORT LoginState {
LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED, // Public session v2.
LOGGED_IN_USER_SUPERVISED, // A supervised user is logged in
LOGGED_IN_USER_KIOSK_APP, // Is in kiosk app mode
LOGGED_IN_USER_ARC_KIOSK_APP // Is in ARC kiosk mode
LOGGED_IN_USER_ARC_KIOSK_APP, // Is in ARC kiosk mode
LOGGED_IN_USER_CHILD // A child is logged in
};
class Observer {
......@@ -85,6 +86,9 @@ class CHROMEOS_EXPORT LoginState {
// Returns true if logged in as a kiosk app.
bool IsKioskApp() const;
// Returns true if a child user is logged in.
bool IsChildUser() const;
// Whether a network profile is created for the user.
bool UserHasNetworkProfile() const;
......
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