diff options
author | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 13:31:46 +0000 |
---|---|---|
committer | ygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 13:31:46 +0000 |
commit | 688d82173be7b00aa3397191c25e1c32f5ce32ea (patch) | |
tree | 1eb1f6b52bab98385b4ce004042eab0fa87918fc | |
parent | 4e20b5735cd6b8df96ff04640427e18ac9e2b543 (diff) | |
download | chromium_src-688d82173be7b00aa3397191c25e1c32f5ce32ea.zip chromium_src-688d82173be7b00aa3397191c25e1c32f5ce32ea.tar.gz chromium_src-688d82173be7b00aa3397191c25e1c32f5ce32ea.tar.bz2 |
active_user_ is reset to NULL when corresponding User object is deleted.
BUG=348235
Review URL: https://codereview.chromium.org/190743003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256220 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/login/user_manager_impl.cc | 20 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/user_manager_impl.h | 4 |
2 files changed, 16 insertions, 8 deletions
diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc index 79086d9..6026c12 100644 --- a/chrome/browser/chromeos/login/user_manager_impl.cc +++ b/chrome/browser/chromeos/login/user_manager_impl.cc @@ -254,15 +254,13 @@ UserManagerImpl::~UserManagerImpl() { // Can't use STLDeleteElements because of the private destructor of User. for (UserList::iterator it = users_.begin(); it != users_.end(); it = users_.erase(it)) { - if (active_user_ == *it) - active_user_ = NULL; - delete *it; + DeleteUser(*it); } // These are pointers to the same User instances that were in users_ list. logged_in_users_.clear(); lru_logged_in_users_.clear(); - delete active_user_; + DeleteUser(active_user_); } void UserManagerImpl::Shutdown() { @@ -609,8 +607,7 @@ void UserManagerImpl::RemoveUserFromList(const std::string& user_id) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); RemoveNonCryptohomeData(user_id); if (user_loading_stage_ == STAGE_LOADED) { - User* user = RemoveRegularOrLocallyManagedUserFromList(user_id); - delete user; + DeleteUser(RemoveRegularOrLocallyManagedUserFromList(user_id)); } else if (user_loading_stage_ == STAGE_LOADING) { DCHECK(gaia::ExtractDomainName(user_id) == UserManager::kLocallyManagedUserDomain); @@ -1279,7 +1276,7 @@ void UserManagerImpl::RetrieveTrustedDevicePolicies() { if ((*it)->GetType() == User::USER_TYPE_REGULAR && user_email != owner_email_) { RemoveNonCryptohomeData(user_email); - delete *it; + DeleteUser(*it); it = users_.erase(it); changed = true; } else { @@ -1708,7 +1705,7 @@ bool UserManagerImpl::UpdateAndCleanUpPublicAccounts( for (UserList::iterator it = users_.begin(); it != users_.end();) { if ((*it)->GetType() == User::USER_TYPE_PUBLIC_ACCOUNT) { if (*it != GetLoggedInUser()) - delete *it; + DeleteUser(*it); it = users_.erase(it); } else { ++it; @@ -2051,4 +2048,11 @@ void UserManagerImpl::UpdateNumberOfUsers() { base::StringPrintf("%" PRIuS, GetLoggedInUsers().size())); } +void UserManagerImpl::DeleteUser(User* user) { + const bool is_active_user = (user == active_user_); + delete user; + if (is_active_user) + active_user_ = NULL; +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/login/user_manager_impl.h b/chrome/browser/chromeos/login/user_manager_impl.h index dae2766..3123e64 100644 --- a/chrome/browser/chromeos/login/user_manager_impl.h +++ b/chrome/browser/chromeos/login/user_manager_impl.h @@ -361,6 +361,10 @@ class UserManagerImpl // Update the number of users. void UpdateNumberOfUsers(); + // A wrapper around C++ delete operator. Deletes |user|, and when |user| + // equals to active_user_, active_user_ is reset to NULL. + void DeleteUser(User* user); + // Interface to the signed settings store. CrosSettings* cros_settings_; |