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 @@ ...@@ -22,7 +22,7 @@
namespace chromeos { namespace chromeos {
namespace { 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 // If the service doesn't exist or the policy is not set, enable managed
// session by default. // session by default.
const bool managed_session_enabled_by_default = true; const bool managed_session_enabled_by_default = true;
...@@ -35,7 +35,7 @@ bool IsManagedSessionEnabled(const user_manager::User* active_user) { ...@@ -35,7 +35,7 @@ bool IsManagedSessionEnabled(const user_manager::User* active_user) {
return managed_session_enabled_by_default; return managed_session_enabled_by_default;
const policy::PolicyMap::Entry* entry = const policy::PolicyMap::Entry* entry =
service->GetBrokerForUser(active_user->GetAccountId().GetUserEmail()) service->GetBrokerForUser(active_user.GetAccountId().GetUserEmail())
->core() ->core()
->store() ->store()
->policy_map() ->policy_map()
...@@ -47,6 +47,40 @@ bool IsManagedSessionEnabled(const user_manager::User* active_user) { ...@@ -47,6 +47,40 @@ bool IsManagedSessionEnabled(const user_manager::User* active_user) {
return entry && entry->value && entry->value->GetBool(); 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 } // namespace
ChromeUserManager::ChromeUserManager( ChromeUserManager::ChromeUserManager(
...@@ -70,37 +104,22 @@ void ChromeUserManager::UpdateLoginState(const user_manager::User* active_user, ...@@ -70,37 +104,22 @@ void ChromeUserManager::UpdateLoginState(const user_manager::User* active_user,
if (!LoginState::IsInitialized()) if (!LoginState::IsInitialized())
return; // LoginState may be uninitialized in tests. return; // LoginState may be uninitialized in tests.
chromeos::LoginState::LoggedInState logged_in_state; LoginState::LoggedInState logged_in_state;
logged_in_state = active_user ? chromeos::LoginState::LOGGED_IN_ACTIVE LoginState::LoggedInUserType logged_in_user_type;
: chromeos::LoginState::LOGGED_IN_NONE; if (active_user) {
logged_in_state = LoginState::LOGGED_IN_ACTIVE;
chromeos::LoginState::LoggedInUserType login_user_type; logged_in_user_type =
if (logged_in_state == chromeos::LoginState::LOGGED_IN_NONE) { GetLoggedInUserType(*active_user, is_current_user_owner);
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;
} else { } 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) { if (primary_user) {
LoginState::Get()->SetLoggedInStateAndPrimaryUser( 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 { } else {
LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type); LoginState::Get()->SetLoggedInState(logged_in_state, logged_in_user_type);
} }
} }
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/chromeos/system/timezone_util.h" #include "chrome/browser/chromeos/system/timezone_util.h"
#include "chromeos/login/login_state.h"
#include "chromeos/settings/cros_settings_names.h" #include "chromeos/settings/cros_settings_names.h"
#include "components/user_manager/user_manager.h"
namespace chromeos { namespace chromeos {
...@@ -33,14 +33,11 @@ SystemSettingsProvider::~SystemSettingsProvider() { ...@@ -33,14 +33,11 @@ SystemSettingsProvider::~SystemSettingsProvider() {
void SystemSettingsProvider::DoSet(const std::string& path, void SystemSettingsProvider::DoSet(const std::string& path,
const base::Value& in_value) { const base::Value& in_value) {
user_manager::User* user = user_manager::UserManager::Get()->GetActiveUser(); // Guest, public, or child accounts cannot change the time zone.
if (!user || !user->is_logged_in()) if (!LoginState::Get()->IsUserLoggedIn() ||
return; LoginState::Get()->IsGuestSessionUser() ||
user_manager::UserType userType = user->GetType(); LoginState::Get()->IsPublicSessionUser() ||
// Guest, child, or public accounts cannot change the time zone. LoginState::Get()->IsChildUser()) {
if (userType == user_manager::USER_TYPE_GUEST ||
userType == user_manager::USER_TYPE_CHILD ||
userType == user_manager::USER_TYPE_PUBLIC_ACCOUNT) {
return; return;
} }
......
...@@ -287,6 +287,8 @@ bool EnrollmentDialogAllowed(Profile* profile) { ...@@ -287,6 +287,8 @@ bool EnrollmentDialogAllowed(Profile* profile) {
return false; return false;
case LoginState::LOGGED_IN_USER_ARC_KIOSK_APP: case LoginState::LOGGED_IN_USER_ARC_KIOSK_APP:
return false; return false;
case LoginState::LOGGED_IN_USER_CHILD:
return true;
} }
NOTREACHED(); NOTREACHED();
return false; return false;
......
...@@ -110,6 +110,10 @@ bool LoginState::IsKioskApp() const { ...@@ -110,6 +110,10 @@ bool LoginState::IsKioskApp() const {
return logged_in_user_type_ == LOGGED_IN_USER_KIOSK_APP; 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 { bool LoginState::UserHasNetworkProfile() const {
if (!IsUserLoggedIn()) if (!IsUserLoggedIn())
return false; return false;
...@@ -119,12 +123,14 @@ bool LoginState::UserHasNetworkProfile() const { ...@@ -119,12 +123,14 @@ bool LoginState::UserHasNetworkProfile() const {
bool LoginState::IsUserAuthenticated() const { bool LoginState::IsUserAuthenticated() const {
return logged_in_user_type_ == LOGGED_IN_USER_REGULAR || 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_SUPERVISED; logged_in_user_type_ == LOGGED_IN_USER_SUPERVISED ||
logged_in_user_type_ == LOGGED_IN_USER_CHILD;
} }
bool LoginState::IsUserGaiaAuthenticated() const { bool LoginState::IsUserGaiaAuthenticated() const {
return logged_in_user_type_ == LOGGED_IN_USER_REGULAR || 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 // Private methods
......
...@@ -29,7 +29,8 @@ class CHROMEOS_EXPORT LoginState { ...@@ -29,7 +29,8 @@ class CHROMEOS_EXPORT LoginState {
LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED, // Public session v2. LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED, // Public session v2.
LOGGED_IN_USER_SUPERVISED, // A supervised user is logged in LOGGED_IN_USER_SUPERVISED, // A supervised user is logged in
LOGGED_IN_USER_KIOSK_APP, // Is in kiosk app mode 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 { class Observer {
...@@ -85,6 +86,9 @@ class CHROMEOS_EXPORT LoginState { ...@@ -85,6 +86,9 @@ class CHROMEOS_EXPORT LoginState {
// Returns true if logged in as a kiosk app. // Returns true if logged in as a kiosk app.
bool IsKioskApp() const; bool IsKioskApp() const;
// Returns true if a child user is logged in.
bool IsChildUser() const;
// Whether a network profile is created for the user. // Whether a network profile is created for the user.
bool UserHasNetworkProfile() const; 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