OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/login/user_manager_impl.h" | 5 #include "chrome/browser/chromeos/login/user_manager_impl.h" |
6 | 6 |
7 #include <cstddef> | 7 #include <cstddef> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 local_state->GetDictionary(kUserDisplayEmail); | 844 local_state->GetDictionary(kUserDisplayEmail); |
845 | 845 |
846 // Load regular users and locally managed users. | 846 // Load regular users and locally managed users. |
847 std::vector<std::string> regular_users; | 847 std::vector<std::string> regular_users; |
848 std::set<std::string> regular_users_set; | 848 std::set<std::string> regular_users_set; |
849 ParseUserList(*prefs_regular_users, std::set<std::string>(), "", | 849 ParseUserList(*prefs_regular_users, std::set<std::string>(), "", |
850 ®ular_users, ®ular_users_set); | 850 ®ular_users, ®ular_users_set); |
851 for (std::vector<std::string>::const_iterator it = regular_users.begin(); | 851 for (std::vector<std::string>::const_iterator it = regular_users.begin(); |
852 it != regular_users.end(); ++it) { | 852 it != regular_users.end(); ++it) { |
853 User* user = NULL; | 853 User* user = NULL; |
854 if (gaia::ExtractDomainName(*it) == | 854 const std::string domain = gaia::ExtractDomainName(*it); |
855 UserManager::kLocallyManagedUserDomain) { | 855 if (domain == UserManager::kLocallyManagedUserDomain) { |
856 user = User::CreateLocallyManagedUser(*it); | 856 user = User::CreateLocallyManagedUser(*it); |
857 } else { | 857 } else { |
858 user = User::CreateRegularUser(*it); | 858 user = User::CreateRegularUser(*it); |
859 user->set_oauth_token_status(LoadUserOAuthStatus(*it)); | 859 user->set_oauth_token_status(LoadUserOAuthStatus(*it)); |
860 } | 860 } |
861 users_.push_back(user); | 861 users_.push_back(user); |
862 | 862 |
863 string16 display_name; | 863 string16 display_name; |
864 if (prefs_display_names->GetStringWithoutPathExpansion(*it, | 864 if (prefs_display_names->GetStringWithoutPathExpansion(*it, |
865 &display_name)) { | 865 &display_name)) { |
(...skipping 28 matching lines...) Expand all Loading... |
894 // Schedule a callback if device policy has not yet been verified. | 894 // Schedule a callback if device policy has not yet been verified. |
895 if (CrosSettingsProvider::TRUSTED != cros_settings_->PrepareTrustedValues( | 895 if (CrosSettingsProvider::TRUSTED != cros_settings_->PrepareTrustedValues( |
896 base::Bind(&UserManagerImpl::RetrieveTrustedDevicePolicies, | 896 base::Bind(&UserManagerImpl::RetrieveTrustedDevicePolicies, |
897 base::Unretained(this)))) { | 897 base::Unretained(this)))) { |
898 return; | 898 return; |
899 } | 899 } |
900 | 900 |
901 cros_settings_->GetBoolean(kAccountsPrefEphemeralUsersEnabled, | 901 cros_settings_->GetBoolean(kAccountsPrefEphemeralUsersEnabled, |
902 &ephemeral_users_enabled_); | 902 &ephemeral_users_enabled_); |
903 cros_settings_->GetString(kDeviceOwner, &owner_email_); | 903 cros_settings_->GetString(kDeviceOwner, &owner_email_); |
904 const base::ListValue* public_accounts; | 904 base::ListValue public_accounts; |
905 cros_settings_->GetList(kAccountsPrefDeviceLocalAccounts, &public_accounts); | 905 ReadPublicAccounts(&public_accounts); |
906 | 906 |
907 EnsureUsersLoaded(); | 907 EnsureUsersLoaded(); |
908 | 908 |
909 bool changed = UpdateAndCleanUpPublicAccounts(*public_accounts); | 909 bool changed = UpdateAndCleanUpPublicAccounts(public_accounts); |
910 | 910 |
911 // If ephemeral users are enabled and we are on the login screen, take this | 911 // If ephemeral users are enabled and we are on the login screen, take this |
912 // opportunity to clean up by removing all regular users except the owner. | 912 // opportunity to clean up by removing all regular users except the owner. |
913 if (ephemeral_users_enabled_ && !IsUserLoggedIn()) { | 913 if (ephemeral_users_enabled_ && !IsUserLoggedIn()) { |
914 ListPrefUpdate prefs_users_update(g_browser_process->local_state(), | 914 ListPrefUpdate prefs_users_update(g_browser_process->local_state(), |
915 kRegularUsers); | 915 kRegularUsers); |
916 prefs_users_update->Clear(); | 916 prefs_users_update->Clear(); |
917 for (UserList::iterator it = users_.begin(); it != users_.end(); ) { | 917 for (UserList::iterator it = users_.begin(); it != users_.end(); ) { |
918 const std::string user_email = (*it)->email(); | 918 const std::string user_email = (*it)->email(); |
919 if ((*it)->GetType() == User::USER_TYPE_REGULAR && | 919 if ((*it)->GetType() == User::USER_TYPE_REGULAR && |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 else if (active_user_->GetType() == User::USER_TYPE_LOCALLY_MANAGED) | 1444 else if (active_user_->GetType() == User::USER_TYPE_LOCALLY_MANAGED) |
1445 login_user_type = LoginState::LOGGED_IN_USER_LOCALLY_MANAGED; | 1445 login_user_type = LoginState::LOGGED_IN_USER_LOCALLY_MANAGED; |
1446 else if (active_user_->GetType() == User::USER_TYPE_KIOSK_APP) | 1446 else if (active_user_->GetType() == User::USER_TYPE_KIOSK_APP) |
1447 login_user_type = LoginState::LOGGED_IN_USER_KIOSK_APP; | 1447 login_user_type = LoginState::LOGGED_IN_USER_KIOSK_APP; |
1448 else | 1448 else |
1449 login_user_type = LoginState::LOGGED_IN_USER_REGULAR; | 1449 login_user_type = LoginState::LOGGED_IN_USER_REGULAR; |
1450 | 1450 |
1451 LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type); | 1451 LoginState::Get()->SetLoggedInState(logged_in_state, login_user_type); |
1452 } | 1452 } |
1453 | 1453 |
| 1454 void UserManagerImpl::ReadPublicAccounts(base::ListValue* public_accounts) { |
| 1455 const base::ListValue* accounts = NULL; |
| 1456 if (cros_settings_->GetList(kAccountsPrefDeviceLocalAccounts, &accounts)) { |
| 1457 for (base::ListValue::const_iterator entry(accounts->begin()); |
| 1458 entry != accounts->end(); ++entry) { |
| 1459 const base::DictionaryValue* entry_dict = NULL; |
| 1460 if (!(*entry)->GetAsDictionary(&entry_dict)) { |
| 1461 NOTREACHED(); |
| 1462 continue; |
| 1463 } |
| 1464 |
| 1465 int type = DEVICE_LOCAL_ACCOUNT_TYPE_PUBLIC_SESSION; |
| 1466 entry_dict->GetIntegerWithoutPathExpansion( |
| 1467 kAccountsPrefDeviceLocalAccountsKeyType, &type); |
| 1468 switch (type) { |
| 1469 case DEVICE_LOCAL_ACCOUNT_TYPE_PUBLIC_SESSION: { |
| 1470 std::string id; |
| 1471 if (entry_dict->GetStringWithoutPathExpansion( |
| 1472 kAccountsPrefDeviceLocalAccountsKeyId, &id)) { |
| 1473 public_accounts->AppendString(id); |
| 1474 } |
| 1475 break; |
| 1476 } |
| 1477 case DEVICE_LOCAL_ACCOUNT_TYPE_KIOSK_APP: |
| 1478 // TODO(mnissler, nkostylev, bartfab): Process Kiosk Apps within the |
| 1479 // standard login framework: http://crbug.com/234694 |
| 1480 break; |
| 1481 } |
| 1482 } |
| 1483 } |
| 1484 } |
| 1485 |
1454 } // namespace chromeos | 1486 } // namespace chromeos |
OLD | NEW |